c# – SQL参数和问号

前端之家收集整理的这篇文章主要介绍了c# – SQL参数和问号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在从经典ASP切换到ASP.NET.而且我在使用旧方法轻松做一些基本的东西时遇到了一些麻烦.下面是一个方便的ASP函数,我用它来执行几行的标量查询.
  1. FUNCTION ExecuteScalarParams(sqlQuery,Parameter_Array)
  2. Set cmd1 = Server.CreateObject("ADODB.Command")
  3. cmd1.ActiveConnection = con
  4. cmd1.CommandText = sqlQuery
  5. cmd1.CommandType = 1
  6.  
  7. FOR ParamCount = 0 TO UBOUND(Parameter_Array)
  8. cmd1.Parameters(ParamCount) = Parameter_Array(ParamCount)
  9. NEXT 'ParamCount
  10.  
  11. Set rstScalar = cmd1.Execute()
  12.  
  13. IF NOT rstScalar.EOF THEN
  14. arrScalar = rstScalar.GetRows()
  15. IF UBOUND(arrScalar,2) = 0 THEN
  16. ExecuteScalarParams = arrScalar(0,0)
  17. ELSE
  18. ExecuteScalarParams = NULL
  19. END IF
  20. ELSE
  21. ExecuteScalarParams = NULL
  22. END IF
  23.  
  24. rstScalar.Close
  25. Set rstScalar = Nothing
  26. Set cmd1 = Nothing
  27. END FUNCTION

我曾经传递带有问号的SQL查询作为参数的占位符,如下所示:

  1. SELECT TOP 1 UserName FROM Members WHERE (Created>?) AND (AdminLevel=?);

然后我会设置一个参数数组并将其传递给函数

  1. MyArray = ARRAY("1-JAN-2012",1)

数组中的参数将按其出现的顺序替换查询字符串中的问号.

我试图在C#中模仿这个函数,但我陷入了必须传递参数的部分.到目前为止,我已经到了必须使用@Created和@AdminLevel等命名占位符而不是问号的点,然后我必须设置这样的参数对象:

  1. sqlParameter param = new sqlParameter();
  2. param.ParameterName = "@AdminLevel";
  3. param.Value = 1;

有没有办法传递参数而不必设置参数名称,只需使用问号和它们出现的顺序来指定哪个参数在哪里?

解决方法

编辑:正如Dana所指出的,MSDN Docs for Parameters显示您需要为sqlClient使用命名参数,但可以使用OleDb / ODBC的位置参数.

您可以使用下面的代码轻松添加参数;这是我使用的骨架,但我确信有更好的方法.

你仍然需要使用命名参数,但你可以通过命名它们@a,@ b,@ c来模拟你的问号. – 位置参数很好,直到你得到多个参数,你必须不断计算问号的数量,以确定在哪里应用哪个参数值,经常导致错误.

  1. using (var con = new sqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
  2. {
  3. con.Open();
  4. {
  5. using (var command = con.CreateCommand())
  6. {
  7. command.Connection = conn;
  8. command.CommandText = "SELECT * FROM [dbo].[Table] WHERE [c1] = @a AND [c2] = @b";
  9. command.Parameters.AddWithValue("@a",aVal);
  10. command.Parameters.AddWithValue("@b",bVal);
  11. command.CommandType = CommandType.Text;
  12.  
  13. using (var reader = command.ExecuteReader())
  14. {
  15. if (reader.HasRows)
  16. {
  17. while (reader.Read())
  18. {
  19. ///
  20. }
  21. }
  22. else
  23. {
  24. ///
  25. }
  26. }
  27. }
  28. }
  29. }

猜你在找的C#相关文章