web-dev-qa-db-ja.com

c#のパラメータでストアプロデューサーを呼び出す

私は自分のプログラムで削除、挿入、および更新を行うことができ、私は自分のデータベースから作成されたストアード・プロシージャーを呼び出すことによって挿入を試みます。

このボタンインサートはうまく機能します。

private void btnAdd_Click(object sender, EventArgs e)
{
        SqlConnection con = new SqlConnection(dc.Con);
        SqlCommand cmd = new SqlCommand("Command String", con);

        da.InsertCommand = new SqlCommand("INSERT INTO tblContacts VALUES (@FirstName, @LastName)", con);
        da.InsertCommand.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
        da.InsertCommand.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;

        con.Open();
        da.InsertCommand.ExecuteNonQuery();
        con.Close();

        dt.Clear();
        da.Fill(dt);
    } 

これは、連絡先を追加するためにsp_Add_contactという名前のプロシージャを呼び出すためのボタンの始まりです。 sp_Add_contact(@FirstName,@LastName)の2つのパラメータ。私はいくつかの良い例をグーグルで検索したが、私は何も面白くないと思った。

private void button1_Click(object sender, EventArgs e)
{
        SqlConnection con = new SqlConnection(dc.Con);
        SqlCommand cmd = new SqlCommand("Command String", con);
        cmd.CommandType = CommandType.StoredProcedure;

        ???

        con.Open();
        da. ???.ExecuteNonQuery();
        con.Close();

        dt.Clear();
        da.Fill(dt);
    }
127
FrankSharp

クエリを実行するのとほとんど同じです。元のコードでは、コマンドオブジェクトを作成し、それをcmd変数に入れています。絶対に使用しないでください。ただし、ここではda.InsertCommandの代わりにそれを使用します。

また、すべての使い捨てオブジェクトにusingを使用して、それらが正しく配置されていることを確認します。

private void button1_Click(object sender, EventArgs e) {
  using (SqlConnection con = new SqlConnection(dc.Con)) {
    using (SqlCommand cmd = new SqlCommand("sp_Add_contact", con)) {
      cmd.CommandType = CommandType.StoredProcedure;

      cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
      cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;

      con.Open();
      cmd.ExecuteNonQuery();
    }
  }
}
239
Guffa

SPを実行するのに必要なので、パラメータを追加する必要があります。

using (SqlConnection con = new SqlConnection(dc.Con))
{
    using (SqlCommand cmd = new SqlCommand("SP_ADD", con))
    {
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@FirstName", txtfirstname);
        cmd.Parameters.AddWithValue("@LastName", txtlastname);
        con.Open();
        cmd.ExecuteNonQuery();
    }            
}
31
Ravi Gadag

cmd.Parameters.Add(String parameterName, Object value)は現在非推奨です。代わりにcmd.Parameters.AddWithValue(String parameterName, Object value)を使用してください

Add(String parameterName、Object value)は推奨されていません。 AddWithValue(String parameterName、Object value)を使用してください

機能面で違いはありません。彼らがcmd.Parameters.Add(String parameterName, Object value)を支持してAddWithValue(String parameterName, Object value)を非推奨にしたのは、より明確にするためです。 これは同じMSDNリファレンスです

private void button1_Click(object sender, EventArgs e) {
  using (SqlConnection con = new SqlConnection(dc.Con)) {
    using (SqlCommand cmd = new SqlCommand("sp_Add_contact", con)) {
      cmd.CommandType = CommandType.StoredProcedure;

      cmd.Parameters.AddWithValue("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
      cmd.Parameters.AddWithValue("@LastName", SqlDbType.VarChar).Value = txtLastName.Text;

      con.Open();
      cmd.ExecuteNonQuery();
    }
  }
}
9
Rahul Nikate

別の方法として、procsを使った作業を簡単にするライブラリがあります。 https://www.nuget.org/packages/SprocMapper/

SqlServerAccess sqlAccess = new SqlServerAccess("your connection string");
    sqlAccess.Procedure()
         .AddSqlParameter("@FirstName", SqlDbType.VarChar, txtFirstName.Text)
         .AddSqlParameter("@FirstName", SqlDbType.VarChar, txtLastName.Text)
         .ExecuteNonQuery("StoreProcedureName");
3
Greg R Taylor
public void myfunction(){
        try
        {
            sqlcon.Open();
            SqlCommand cmd = new SqlCommand("sp_laba", sqlcon);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.ExecuteNonQuery();
        }
        catch(Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            sqlcon.Close();
        }
}
0
user6916720