在 ASP.Net 中处理数据访问时使用商业 @AT?
Use of commercial @AT when dealing with data access in ASP.Net?
两个小问题,主要涉及在 ASP.Net (C#) 中处理数据时的 @AT 语法。大多数在线教程显示了很多以下类型的代码,但没有提及(或者我可能忽略了)符号的实际用途,尽管它们确实解释了代码的一般用途。在此示例中,仅查询数据库以获取与日历控件的特定月份有关的数据。
protected DataSet GetCurrentMonthData(DateTime firstDate,
DateTime lastDate)
{
DataSet dsMonth = new DataSet();
ConnectionStringSettings cs;
cs = ConfigurationManager.ConnectionStrings["ConnectionString1"];
String connString = cs.ConnectionString;
SqlConnection dbConnection = new SqlConnection(connString);
String query;
query = "SELECT HolidayDate FROM Holidays " + _
" WHERE HolidayDate >= @firstDate AND HolidayDate < @lastDate";
SqlCommand dbCommand = new SqlCommand(query, dbConnection);
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
dbCommand.Parameters.Add(new SqlParameter("@lastDate", lastDate));
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(dbCommand);
try
{
sqlDataAdapter.Fill(dsMonth);
}
catch {}
return dsMonth;
}
第一期:@firstDate和@lastDate在数据库字符串查询中是什么意思或引用?是引用在 GetCurrentMonthData 方法中传递的参数还是数据库中的实际列名 table?
query = "SELECT HolidayDate FROM Holidays " + _
" WHERE HolidayDate >= @firstDate AND HolidayDate < @lastDate";
第二期:@firstDate和firstDate有什么区别?我说 firstDate 是实际参数变量本身是否正确?
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
你的第一个问题:
根据 documentation,名称必须以 @:
开头
ParameterName 以@paramname 的形式指定。
更多信息:
Is it necessary to add a @ in front of an SqlParameter name?
第二个问题:
首先,那不是 ampersand but at sign
or commercial at
。它在此特定上下文中用于指示 SQL 参数名称。
这部分展示了如何将实际值(包含在 firstDate
C# 变量中)传递给 SQL 参数 (@firstDate
) :
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
您可以读取您的参数化 SQL 查询语句,例如字符串连接,但使用 big advantages(前者使您免于 SQL 注入,任意数据类型到具有正确格式的字符串转换*, 等等):
query = "SELECT HolidayDate FROM Holidays " + _
" WHERE HolidayDate >= " + firstDate + " AND HolidayDate < " + lastDate;
*) 看到在上面的字符串连接版本中,您需要根据您的 RDBMS 本地将 firstDate
和 lastDate
转换为具有正确格式的字符串使其工作的设置。
查询语句中@inputvalue的主要用途是避免sql注入攻击。
如果您在构建查询语句时使用普通的连接方法,黑客可以轻松绕过带有 sql 注入的语句。
例如:
"Select * from user where username ='" + username.text + "' and password ='" + password.text + "'"
如果你使用上面的语句来验证用户登录,想想如果用户在用户名文本框中键入 a' = 'a') 或 'sometext 会发生什么和密码框中的 sometext。如果在用户验证中检查没有return条记录,它将return条记录执行并进入帐户区域。
为了避免这种情况,Microsoft 引入了@parameter 来构建sql 查询语句。您在@parameter 中传递的任何值都被视为输入参数值,您不能在其中注入 sql 语句。
回答你的第二个问题
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
上述方法用于将@parameter(Add方法中的第一个参数)替换为参数值(Add方法中的第二个参数)。它使用@作为分隔符。它检查查询语句中是否有带前缀 '@' 的单词,它将被标记为参数并替换为作为 Add 方法中的第二个参数传递的实际值。
我同意@har07。那不是符号。据我所知,& 符号看起来像这样 -> &
。为了回答这个问题,'at' sign
(@) 用于表示 parameterized query in c# 中的变量。
在代码中
dbCommand.Parameters.Add(new SqlParameter("@firstDate",firstDate));
您正在将 DateTime 变量 firstDate
的值分配给查询中的 @firstDate
变量。
这是一个不那么令人困惑的例子(我希望如此):
假设我有一个名为 myName
的字符串变量,我想将其传递给我的查询 select * from students where name = @name
。
要在我的查询中将 myName
的值传递给 @name
,我会做
dbCommand.Parameters.Add(new SqlParameter("@name",myName));
希望对您有所帮助。
两个小问题,主要涉及在 ASP.Net (C#) 中处理数据时的 @AT 语法。大多数在线教程显示了很多以下类型的代码,但没有提及(或者我可能忽略了)符号的实际用途,尽管它们确实解释了代码的一般用途。在此示例中,仅查询数据库以获取与日历控件的特定月份有关的数据。
protected DataSet GetCurrentMonthData(DateTime firstDate,
DateTime lastDate)
{
DataSet dsMonth = new DataSet();
ConnectionStringSettings cs;
cs = ConfigurationManager.ConnectionStrings["ConnectionString1"];
String connString = cs.ConnectionString;
SqlConnection dbConnection = new SqlConnection(connString);
String query;
query = "SELECT HolidayDate FROM Holidays " + _
" WHERE HolidayDate >= @firstDate AND HolidayDate < @lastDate";
SqlCommand dbCommand = new SqlCommand(query, dbConnection);
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
dbCommand.Parameters.Add(new SqlParameter("@lastDate", lastDate));
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(dbCommand);
try
{
sqlDataAdapter.Fill(dsMonth);
}
catch {}
return dsMonth;
}
第一期:@firstDate和@lastDate在数据库字符串查询中是什么意思或引用?是引用在 GetCurrentMonthData 方法中传递的参数还是数据库中的实际列名 table?
query = "SELECT HolidayDate FROM Holidays " + _
" WHERE HolidayDate >= @firstDate AND HolidayDate < @lastDate";
第二期:@firstDate和firstDate有什么区别?我说 firstDate 是实际参数变量本身是否正确?
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
你的第一个问题:
根据 documentation,名称必须以 @:
开头ParameterName 以@paramname 的形式指定。
更多信息:
Is it necessary to add a @ in front of an SqlParameter name?
第二个问题:
首先,那不是 ampersand but at sign
or commercial at
。它在此特定上下文中用于指示 SQL 参数名称。
这部分展示了如何将实际值(包含在 firstDate
C# 变量中)传递给 SQL 参数 (@firstDate
) :
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
您可以读取您的参数化 SQL 查询语句,例如字符串连接,但使用 big advantages(前者使您免于 SQL 注入,任意数据类型到具有正确格式的字符串转换*, 等等):
query = "SELECT HolidayDate FROM Holidays " + _
" WHERE HolidayDate >= " + firstDate + " AND HolidayDate < " + lastDate;
*) 看到在上面的字符串连接版本中,您需要根据您的 RDBMS 本地将 firstDate
和 lastDate
转换为具有正确格式的字符串使其工作的设置。
查询语句中@inputvalue的主要用途是避免sql注入攻击。 如果您在构建查询语句时使用普通的连接方法,黑客可以轻松绕过带有 sql 注入的语句。
例如:
"Select * from user where username ='" + username.text + "' and password ='" + password.text + "'"
如果你使用上面的语句来验证用户登录,想想如果用户在用户名文本框中键入 a' = 'a') 或 'sometext 会发生什么和密码框中的 sometext。如果在用户验证中检查没有return条记录,它将return条记录执行并进入帐户区域。
为了避免这种情况,Microsoft 引入了@parameter 来构建sql 查询语句。您在@parameter 中传递的任何值都被视为输入参数值,您不能在其中注入 sql 语句。
回答你的第二个问题
dbCommand.Parameters.Add(new SqlParameter("@firstDate",
firstDate));
上述方法用于将@parameter(Add方法中的第一个参数)替换为参数值(Add方法中的第二个参数)。它使用@作为分隔符。它检查查询语句中是否有带前缀 '@' 的单词,它将被标记为参数并替换为作为 Add 方法中的第二个参数传递的实际值。
我同意@har07。那不是符号。据我所知,& 符号看起来像这样 -> &
。为了回答这个问题,'at' sign
(@) 用于表示 parameterized query in c# 中的变量。
在代码中
dbCommand.Parameters.Add(new SqlParameter("@firstDate",firstDate));
您正在将 DateTime 变量 firstDate
的值分配给查询中的 @firstDate
变量。
这是一个不那么令人困惑的例子(我希望如此):
假设我有一个名为 myName
的字符串变量,我想将其传递给我的查询 select * from students where name = @name
。
要在我的查询中将 myName
的值传递给 @name
,我会做
dbCommand.Parameters.Add(new SqlParameter("@name",myName));
希望对您有所帮助。