我需要使用 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
中,我有需要更新的表。我收到一个错误:
connection string property has not been initialized
那么,我该如何解决呢?谢谢。
最佳答案
您正在 clientSizes 方法中重新定义变量 adapterSize 有效地隐藏了在类范围内定义的全局变量。
通过这种方式,在类范围内定义的全局变量没有关于添加到内部变量的参数 ID 的信息,当您尝试使用它时会引发异常。
只需删除adapterSize 的声明并使用全局变量
// SqlDataAdapter adapterSize = new SqlDataAdapter(commSelect);
adapterSize = new SqlDataAdapter(commSelect);
旁注。
- 不清楚为什么你定义了所有这些全局变量 静态关键字。如果没有令人信服的理由这样做,我 建议删除 static 关键字并只使用本地类 私有(private)变量。
- 声明时不需要初始化 SqlDataAdapter,然后在 clientSizes 方法中再次初始化,只需在方法中使用初始化即可(当然,您需要确保没有在其他任何地方使用该适配器在调用 clientSizes 之前
- 您调用了 adapterSize.Fill 两次。同样不需要第二次调用。 DataSet的填充足以读取数据
关于c# - 从 datagridview 更新 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43467466/