Как говорили другие.Параметризованные входы.
Вот фрагмент кода, который я написал на работе (удален код, специфичный для работы).Это не идеально, но моя основная работа - не программирование, и я все еще изучал C #, когда писал это.Если бы я написал это сейчас, я бы использовал вместо набора данных средство чтения данных.
Но обратите внимание, как я использую переменные в фактической строке SQL и назначаю переменные с помощью "da.SelectCommand.Parameters.AddWithValue"
public Boolean Login(string strUserName, string strPassword)
{
SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection();
DataSet ds = null;
SqlDataAdapter da = null;
sqlConn.ConnectionString = strConnString;
try
{
blnError = false;
sqlConn.Open();
ds = new DataSet();
da = new SqlDataAdapter("select iuserid from tbl_Table where vchusername = @vchUserName and vchpassword = @vchPassword", sqlConn);
da.SelectCommand.Parameters.AddWithValue("@vchUserName", strUserName);
da.SelectCommand.Parameters.AddWithValue("@vchPassword", strPassword);
da.SelectCommand.CommandTimeout = 30;
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
iUserId = (int)ds.Tables[0].Rows[0]["iuserid"];
}
}
catch (Exception ex)
{
blnError = true;
Log("Login: " + ex.Message);
}
finally
{
if (sqlConn.State != ConnectionState.Closed)
sqlConn.Close();
if (da != null)
da.Dispose();
if (ds != null)
ds.Dispose();
}
if (blnError)
return false;
if (iUserId > 0)
return true;
return false;
}