c# - 从 datagridview 更新 SQL Server 数据库

标签 c# sql-server database datagridview

我需要使用 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);

旁注。

  1. 不清楚为什么你定义了所有这些全局变量 静态关键字。如果没有令人信服的理由这样做,我 建议删除 static 关键字并只使用本地类 私有(private)变量。
  2. 声明时不需要初始化 SqlDataAdapter,然后在 clientSizes 方法中再次初始化,只需在方法中使用初始化即可(当然,您需要确保没有在其他任何地方使用该适配器在调用 clientSizes
  3. 之前
  4. 您调用了 adapterSize.Fill 两次。同样不需要第二次调用。 DataSet的填充足以读取数据

关于c# - 从 datagridview 更新 SQL Server 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43467466/

相关文章:

c# - 如何检查文件头结构以识别 MSI 文件

c# - 找出具体异常

sql-server - com.microsoft.sqlserver.jdbc.SQLServerException : Cannot open database <database> requested by the login. 登录失败

android - 如何在android中使用ormlite对外键执行级联删除

php - 通过 API 对未排序和过滤的数据库数据进行分页的最佳方法是什么?

c# - UWP IoT 扩展中的唯一设备 ID

c# - 如何避免特定字符串模式被 Regex.replace () 替换

sql - 连接子句返回两个表的结果 SQL Server

sql-server - TAdoDataSet、TAdoStoredProc 多个结果集

c# - WinForms 应用程序覆盖行并添加数据两次