C# 将datagridview的内容保存到数据库中的问题

C# 将datagridview的内容保存到数据库中的问题,c#,C#,我正在开发一个简单的数据库相关应用程序。GUI由datagrid视图和保存按钮组成。datagridview使用数据集作为其源。数据集通过从SQL Server Compact Edition数据库文件获取数据来填充 问题是当我使用datagridview更改数据库内容,然后继续更改它时 SqlCeDataAdapter da = new SqlCeDataAdapter(); da.UpdateCommand = Con.CreateCommand(); // Con is SqlCeComm

我正在开发一个简单的数据库相关应用程序。GUI由datagrid视图和保存按钮组成。datagridview使用数据集作为其源。数据集通过从SQL Server Compact Edition数据库文件获取数据来填充

问题是当我使用datagridview更改数据库内容,然后继续更改它时

SqlCeDataAdapter da = new SqlCeDataAdapter();
da.UpdateCommand = Con.CreateCommand(); // Con is SqlCeCommand object
da.UpdateCommand.CommandText = "update TempTable set " +
"S.No = @S.No , Name = @Name";

this.AddParams(da.UpdateCommand, "S.No", "Name");
da.Update(ds); // ds is the dataset used as source by the datagridview
和AddParams方法

private void AddParams(SqlCeCommand cmd, params string[] cols)
        {
            foreach (string col in cols)
            {
                cmd.Parameters.Add("@" + col, SqlDbType.Char, 0, col);
            }
        }
问题是我得到了一个ArguementException,其描述如下行中的char

cmd.Parameters.Add("@" + col, SqlDbType.Char, 0, col);
我相信这是因为一个参数是varchar,而另一个是整数。那我是怎么做到的


p、 我是一名网络编程初学者。

如果这只是导致问题的类型,您可以为每一列定义一个单独的类型,如下所示:

Dictionary<string, SqlDbType> columnDefinition = new Dictionary<string, SqlDbType>( )
{
    { "S.No", SqlDbType.YourType },
    { "Name", SqlDbType.OtherType }
};

private void AddParams( SqlCeCommand cmd, params string[] cols )
{
    foreach( string col in cols )
    {
       cmd.Parameters.Add( "@" + col, columnDefinition[ col ], 0, col );
    }
}

您好,我认为您没有提供db值大小,因为您向它提供了0

提供大小或仅@paraname,value

更多信息 参考

如果未定义尺寸0,则默认值为最大值;这意味着,当您将内容保存到数据库时,适配器不会执行额外的长度检查。如果您尝试删除圆点,则可以将其保留为0。在美国,不是吗?可能解析器被它绊倒了,并且cmd.Parameters.Add中的@in是可选的,您可以删除它