这两个SQL命令参数声明方法有什么区别?

时间:2016-02-26 16:54:44

标签: c# sql sql-server

我是SQL的新手,我正在使用Windows窗体和C#。

以下2个SQL查询工作正常,没有任何问题,但我担心其中一个可能会导致问题,我不知道哪个更安全。

我只是想知道第一种和第二种方法中两个命令参数减速和值分配之间的区别是什么:

第一个命令参数减速方法:

SqlConnection MyConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString);

SqlCommand MyCommand = new SqlCommand();
DataTable DataTable = new DataTable();

SqlDataAdapter Sql_Data_Adapter = new SqlDataAdapter();

long PhoneNumber = 07429114523;

MyConnection.Open();
MyCommand.CommandText = "SELECT * FROM List_of_All_Orders WHERE Phone= @PhoneNumber ";
MyCommand.Connection = MyConnection;

// command parameters declaration and value assigning
MyCommand.Parameters.Add("@PhoneNumber", SqlDbType.BigInt).Value = PhoneNumber;

Sql_Data_Adapter.SelectCommand = MyCommand;
Sql_Data_Adapter.Fill(DataTable);

dataGridView1.DataSource = DataTable;            
MyCommand.Parameters.Clear();
MyConnection.Close();

第二个命令参数声明方法:

long PhoneNumber = 07429114523;
MyConnection.Open();
MyCommand.CommandText = "SELECT * FROM List_of_All_Orders WHERE Phone= @PhoneNumber ";
MyCommand.Connection = MyConnection;

// command parameters declaration and value assigning
MyCommand.Parameters.Add("@PhoneNumber", SqlDbType.BigInt);
MyCommand.Parameters["@PhoneNumber"].Value = PhoneNumber;

Sql_Data_Adapter.SelectCommand = MyCommand;
Sql_Data_Adapter.Fill(DataTable);

dataGridView1.DataSource = DataTable;

MyCommand.Parameters.Clear();
MyConnection.Close();

任何人都知道在命令参数声明和值分配方面选择哪个方法是第一个或第二个,哪个方法更安全。

请帮忙。谢谢

2 个答案:

答案 0 :(得分:1)

  MyCommand.Parameters.Add("@PhoneNumber", SqlDbType.BigInt).Value = PhoneNumber;

单行版本更好,因为

  • 一切都在一行完成,
  • 没有在第二行拼写参数名称的风险,

但是还有很多问题要出错。
我会做一个小功能,为你做这一切,并防止常见的错误:

   // Returns a new BigInt parameter
   public SqlParameter ParamBigInt(string paramName, long v)
   {
       // Fixup parameter name
       string name = paramName.Trim();

       if (!name.StartsWith("@"))
           name = "@" + name;

       // Make the new parameter
       return new SqlParameter(name, SqlDbType.BigInt)
       {
           Value = p;
       };
   }

然后使用它:

  MyCommand.Parameters.Add(ParamBigInt("@PhoneNumber", PhoneNumber));

答案 1 :(得分:-2)

上述两种方法都没有问题。事实上,语法较短,您无需担心数据类型。

MyCommand.Parameters.Add("@PhoneNumber", PhoneNumber);

想象一下,你想要添加20个参数,你会喜欢一些能加快项目完成时间的东西