我是SQL新手,我正在使用Windows窗體和C#。這兩個SQL命令參數聲明方法有什麼區別?
以下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();
任何人都知道在命令參數中選擇第一或第二種方法聲明和價值分配,哪一個更安全。
請幫忙。謝謝
他們是一樣的,後者只是更詳細。請注意,電話號碼是字符串,而不是整數,因此您將丟失前導0.保存稍後使用'using(){}'調用連接和命令和適配器調用'.Dispose'的麻煩。 –
@Alex K.我使用PhoneNumber = Convert.ToInt64(textBox1.Text);因爲電話號碼不適合「int32」。所以我必須使用「長」。除「long」之外還有其他數據類型可以攜帶11位數字嗎?謝謝 – Kate
是的,C#中的字符串和SQL中的VARCHAR(32),如果要保留前導零,則必須使用字符串。 –