我需要用SqlDataAdapter
更新本地PC上的数据库。项目是windows窗体。此方法从数据库中选择信息并返回一个DataTable
作为DataGridView
的数据源:
static string querySelect = "select * from [customers_Sizes] where ID_customers = @ID_customers";
private DataSet recivedData;
static public SqlDataAdapter adapterSize = new SqlDataAdapter(querySelect, connectionString);
SqlCommandBuilder cmdBuilder;
public DataTable clientSizes(int ID)
{
DataTable table = new DataTable();
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand commSelect = new SqlCommand(querySelect, conn);
commSelect.Parameters.AddWithValue("@ID_customers", ID);
adapterSize = new SqlDataAdapter(commSelect);
cmdBuilder = new SqlCommandBuilder(adapterSize);
recivedData = new DataSet();
conn.Open();
adapterSize.Fill(recivedData);
table = recivedData.Tables[0];
}
return table;
}
此代码用于更新:
public void setNewSizes()
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
adapterSize.UpdateCommand = cmdBuilder.GetUpdateCommand();
conn.Open();
adapterSize.Update(receivedData.Tables[0]);
}
}
在
receivedData
中,我正好有需要更新的表。我得到一个错误:连接字符串属性尚未初始化
那么,我该怎么解决呢?谢谢。
最佳答案
您正在clientsizes方法中重新定义变量adaptersize,从而有效地隐藏在类作用域中定义的全局变量。
通过这种方式,在类作用域中定义的全局变量没有关于添加到内部变量的参数id的信息,并且当您尝试使用它时,会引发异常。
只需删除adaptersize的声明并使用全局变量
// SqlDataAdapter adapterSize = new SqlDataAdapter(commSelect);
adapterSize = new SqlDataAdapter(commSelect);
旁注。
不清楚为什么要用
静态关键字。如果没有令人信服的理由,我
建议删除static关键字,只使用类local
私有变量。
在声明sqldataadapter时,无需初始化它,然后在clientsize方法中再次初始化,只需在方法中使用初始化(当然,在调用clientsize之前,您需要确保在其他任何地方都不使用该适配器
您正在调用适配器大小。填充两次。同样,不需要第二个电话。数据集的填充足以读取数据