2016-01-23 54 views
0

我想知道哪些是向SQLCommand添加参数的“正确”方式。在我看来最好匹配数据类型。然而,比使用.ToString()方法性能更好地解析字符串为Int更好?这是否违背良好的做法? SQL服务器似乎不在乎。表中的id是int类型。SqlCommand VarChar或Int?

command.CommandText = "SELECT name FROM table WHERE [email protected]"; 
command.Parameters.Add("@ID", System.Data.SqlDbType.Int).Value = int.Parse(Request.QueryString["id"]); 

OR

command.CommandText = "SELECT name FROM table WHERE [email protected]"; 
command.Parameters.Add("@ID", System.Data.SqlDbType.VarChar).Value = Request.QueryString["id"].ToString(); 
+2

您可以使用['AddWithValue'方法](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue(v = vs.110).aspx)并跳过数据类型声明。 –

+0

第一种方法是最好的,如果用户通过'字符串',当转换为'int'时抛出异常,但在第二种方法中,用户可以从查询字符串中传递字符串,并将其放入你的cluase select和sql返回错误中可以将字符串转换为int。第一种方法是安全而不是第二种。它的好处handel错误从您的代码没有sql –

+0

我同意,你怎么看待tryparse?它会更好地使用它,然后varchar SqlDbType仍然? – hackingchemist

回答

4

int类型在SQL Server是在CLR侧Int32mapped。这就是为什么“正确”的方式是添加一个参数SqlDbType.Int。期。

但是,解析字符串为Int更好比使用 .ToString()方法的性能明智吗?

发送错误的参数类型值作为参数可能产生比性能更严重的问题。看起来“性能”不是,即使是在您的示例中也是一个真实案例,因为您从未在工作中提到任何性能问题。

SQL服务器似乎并不关心

但作为一个开发者,你应该

+0

因此我问这个问题的原因 – hackingchemist