这个问题有一个相关的提问:
但我想知道它们之间的区别,以及不同的方法是否存在任何问题。
我通常使用类似于以下结构的方式:
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
}
现在有几种方法可以添加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");
假设在传递变量字符中使用字段长度不是很理想,因为它是一个可能在以后更改的神奇值。这样做会有什么问题吗(性能或其他方面),我认为它默认为varchar(max)或数据库等效项。我相当满意这样可以工作。
我更担心的是,如果我使用上述第三或第四个选项,则会丢失SqlDbType枚举。是否存在无法正常工作的情况?我可以想象varchar被错误地转换为char或反过来,或者decimal到money的问题....
就数据库而言,我认为字段类型比长度更不可能更改,那么保留它是否值得呢?
SqlDataAdapter.Fill()
之前不需要打开连接,而且这样做有好处吗? - Rowland Shaw