我尝试更新我的数据网格视图。 (已编辑)
我的代码:
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,有什么区别?预先感谢。
如果您有更好的代码,我想学习。谢谢!
您可以阅读有关数据适配器与 Sql 命令
的内容要克服该错误,我相信您需要分配命令的 Connection = con
update.Connection = con;
这里是参考:SqlCommand.Connection 属性
或者在这一行中:
SqlCommand update = new SqlCommand(updateData, con);
ps 使用完 SqlCommand 对象后,不要忘记处置它们:
if (sqlCommand != null)
{
sqlCommand.Dispose();
sqlCommand = null;
}
首先:确保您的
Update
查询正确。
更新语法:
UPDATE [TableName]
SET [ColumnName] = 'new value'
WHERE [ColumnName] = 'yourFilterValue'
您的更新查询必须是这样的:
String updateData = "UPDATE CostPrice SET CostID = @CostID, SupplierName = @SupplierName, CostPrice = @CostPrice WHERE PartsID = @PartsID";
第二:您刚刚错过了在
SqlConnection
上添加 SqlCommand
。
SqlCommand update = new SqlCommand(updateData, con);
第三:您的查询中有参数,但您甚至没有设置它们的值。
在 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();
问候
正如 Jeremy Thompson 所建议的,您缺少一行代码。
update.Connection = con;
在调用之前添加此代码
update.ExecuteNonQuery();