相关疑难解决方法(0)

添加SqlCommand参数时应该何时使用"SqlDbType"和"size"?

有一个相关的问题:

将参数传递给SQLCommand的最佳方法是什么?

但我想知道差异是什么,以及不同方式是否存在任何问题.

我通常使用这样的结构:

using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand cmd = new SqlCommand(SQL, conn))
{
     cmd.CommandType = CommandType.Text;
     cmd.CommandTimeout = Settings.Default.reportTimeout;
     cmd.Parameters.Add("type", SqlDbType.VarChar, 4).Value = type;

     cmd.Connection.Open();

     using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
     {
         adapter.Fill(ds);
     }
      //use data                    
}
Run Code Online (Sandbox Code Playgroud)

现在有几种方法可以添加cmd参数,我想知道哪个是最好的:

cmd.Parameters.Add("@Name", SqlDbType.VarChar, 20).Value = "Bob";
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = "Bob";
cmd.Parameters.Add("@Name").Value = "Bob";
cmd.Parameters.AddWithValue("@Name", "Bob");
Run Code Online (Sandbox Code Playgroud)

在我假设的变量传递中具有字段的长度是不可取的,因为它是可以在数据库中稍后更改的魔术值.它是否正确?它是否会导致以这种方式(性能或其他)传递varchar的任何问题,我假设它默认为varchar(max)或数据库等效.我很高兴这会奏效.

更关心我的部分是如果我使用上面列出的第三或第四个选项,则丢失SqlDbType枚举我根本不提供类型.有没有这种情况不起作用的情况我可以想象varchar被错误地转换为char或者反之亦然的问题,或者可能是带有小数的问题....

就数据库而言,我认为字段类型的变化远不如长度,因此值得保留?

.net c# ado.net sqlcommand

42
推荐指数
2
解决办法
6万
查看次数

标签 统计

.net ×1

ado.net ×1

c# ×1

sqlcommand ×1