0
你可以檢查我的這個功能嗎。線程安全還是不被使用?我想了解公共靜態類是如何工作的。公共靜態類中的非靜態成員是否線程安全?
該函數將用於通過用戶名從數據庫獲取訪問者的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 [email protected]";
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;
}
}
yes數據庫是microsoft sql server 2008 r2。所以變量srUserId對於每個會話都是唯一的嗎?無論何時發生呼叫,它都會被創建和使用。因此可以說100個併發呼叫發生了。在這種情況下,該功能將如何工作? 1完成然後去另外一個或100個電話同時執行? – MonsterMMORPG
srUserId是一個方法變量。每個方法調用都會創建一個不同的實例。該方法將並行執行多次。請注意,您不應該「吞下」異常。您至少應該記錄錯誤消息。 – Erel
但是當100個併發呼叫發生時,他們會在同一時間執行或開始第一次完成開始秒? – MonsterMMORPG