首页 > 解决方案 > 如何修改对象 SqlParameter 类型的 DbType 值

问题描述

我有一个像这样定义的变量object[] parameters = new object[0]; 在运行一些代码后,它将存储一些 SqlParameter 值。在此处输入图像描述

问题是当我扩展值时,如果数据类型仅为字符串,我希望将 DbType 更改为 AnsiString。如下图所示。如果值为int,则不会修改数据类型。 在此处输入图像描述

那么如何迭代parameters以改变它呢?我试过

foreach(var item in parameters)
            {
                item.DbType 
            }

但正在出错。

标签: c#sql-server

解决方案


收集 SqlParameters 的最佳做法是创建 List,在执行命令后,SqlParameters 将具有 Sql Query 的正确值。

所以你可以创建一个 SqlParameters 列表,你可以在执行后处理它。

创建 Sql 参数的示例:

cmd.Parameters.Add("FromID", SqlDbType.Int).Value = FromID;
cmd.Parameters.Add("ToID", SqlDbType.Int).Value = ToID;
cmd.Parameters.Add("User", SqlDbType.VarChar, 255).Value = User;
new SqlParameter("Name",[Value]){ SqlDbType = SqlDbType.VarChar, Size = 1000 }

SqlCommand中插入Sql参数列表示例

private Dictionary<string, SqlParameter> RunSqlStringCommand(string sqlString, List<SqlParameter> sqlParameters)
        {
            try
            {
                using (Database.Connection)
                {
                    Database.Connection.Open();
                    var cmd = Database.Connection.CreateCommand();
                    cmd.CommandText = sqlString;
                    cmd.CommandType = CommandType.StoredProcedure;
                    foreach (var item in sqlParameters) cmd.Parameters.Add(item.Value);
                    cmd.ExecuteReader();
                    Database.Connection.Close();
                    return sqlParameters;
                }
            }
            catch (Exception)
            {
                throw;
            }
        }

执行 Sql 参数后,如果它们具有输出功能,则它们具有来自过程的插入值。


推荐阅读