0

データグリッドビューを更新しようとしました。(編集)

私のコード:

private void button1_Click(object sender, EventArgs e)
    {
        con = new System.Data.SqlClient.SqlConnection();
        con.ConnectionString = "Data Source=tcp:SHEN-PC,49172\\SQLEXPRESS;Initial Catalog=LSEStock;Integrated Security=True";
        con.Open();


        if (dataGridView1.Rows.Count > 0)
        {   
            int nRowIndex = dataGridView1.Rows.Count-2;

            if (dataGridView1.Rows[nRowIndex].Cells[1].Value != null)
            {
                textBox2.Text = Convert.ToString(dataGridView1.Rows[nRowIndex].Cells[1].Value);
                String updateData = "UPDATE CostPrice SET SupplierName = @SupplierName, CostPrice = @CostPrice WHERE PartsID = '" +textBox1.Text+"'";
                SqlCommand update = new SqlCommand(updateData, con);
                SqlDataAdapter adapter = new SqlDataAdapter(updateData, con);

                update.Parameters.Add("@SupplierName", SqlDbType.NVarChar, 50, "SupplierName");
                update.Parameters.Add("@CostPrice", SqlDbType.NVarChar, 50, "CostPrice");
                adapter.UpdateCommand = update;

                //update.ExecuteNonQuery();

                if (update != null)
                {
                    update.Dispose();
                    update = null;
                }

            }
            else
            {
                MessageBox.Show("NULL");
            }
        }
        con.Close();
    }

ExecuteNonQuery が初期化されていないことを示しています。コードの何が問題になっていますか?

私は SqlCommand を使用して更新していますが、インターネットから見たところ、ほとんどの人が SqlDataAdapter を使用しています。違いは何ですか? 前もって感謝します。

より良いコードがあれば、そこから学びたいと思います。ありがとう!

4

3 に答える 3

1

1番目:更新クエリが正しいことを確認します

構文の更新:

   UPDATE [TableName] SET [CoulumnName]='new value' where [ColumnName]='yourFilterValue'

更新クエリは次のようなものである必要があります。

 String updateData = "UPDATE CostPrice SET CostID = @CostID, SupplerName = @SupplierName, CostPrice = @CostPrice WHERE PartsID = @PartsID";

2番目:sqlコマンドにsqlconnectionを追加できませんでした。

SqlCommand update = new SqlCommand(updateData,con);

3番目:クエリにパラメータがありますが、その値を設定していません。

csharp-stationでこのサンプルを確認してください:ado.netレッスン6

このコードは次のようになります。

string updateData = "UPDATE CostPrice SET SupplierName = @SupplierName, CostPrice = @CostPrice WHERE PartsID =@PartsID";
SqlCommand update = new SqlCommand(updateData, con);

update.Parameters.Add("@SupplierName", SqlDbType.NVarChar, 50, "SupplierName");
update.Parameters.Add("@CostPrice", SqlDbType.NVarChar, 50, "CostPrice");
update.Parameters.Add("@PartsID", SqlDbType.NVarChar, 50,textBox1.Text);
update.ExecuteNonQuery();

よろしく

于 2012-08-03T04:48:38.017 に答える
1

Data Adapter Vs Sql Commandについて読むことができます

エラーを克服するには、コマンドの Connection = con を割り当てる必要があると思います

update.Connection = con;

ここに参照があります: SqlCommand.Connection プロパティ

またはこの行で:

SqlCommand update = new SqlCommand(updateData, con);

ps SqlCommand オブジェクトを使い終わったら、それらを破棄することを忘れないでください。

if (sqlCommand != null)
{
    sqlCommand.Dispose();
    sqlCommand = null;
}
于 2012-08-03T02:25:22.470 に答える
0

Jeremy Thompsonが示唆したように、1行のコードが欠落しています。

update.Connection = con; 

呼び出す直前にこのコードを追加しますupdate.ExecuteNonQuery();

于 2012-08-03T04:42:32.653 に答える