你能为我检查一下这个功能吗?是否可以使用线程安全。我试图了解公共静态类是如何工作的。
此功能将用于通过用户名从数据库获取访问者的userId。可能会发生很多并发呼叫。这也是最好的性能方式和sql注入安全。
ASP.net 4.0 - C# - MSSQL 2008 R2 - IIS 7.5
using System;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data;
public static class csGetUserId
{
public static string srCommandText = "select UserId from tblUsersProfile where userName=@userName";
public static string ReturnUserId (string srUserName)
{
string srUserId = "0";
using (SqlConnection connection = new SqlConnection(DbConnection.srConnectionString))
{
try
{
SqlCommand cmd = new SqlCommand(srCommandText, connection);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("@userName", srUserName);
SqlDataReader dsReader = null;
connection.Open();
dsReader = cmd.ExecuteReader();
if (dsReader.HasRows)
{
while (dsReader.Read())
{
srUserId=dsReader["UserId"].ToString();
}
}
else
{
}
}
catch
{
srUserId="-1";
}
}
return srUserId;
}
}
答案 0 :(得分:1)
假设数据库支持多个连接,并且您将srCommandText更改为只读,则此方法是线程安全的。 使srCommandText成为只读也可以防止SQL注入。