[英]Inserting to a SQL database in C#
我試圖在我的C#應用程序中插入SQL數據庫。
我閱讀了一些文檔,並提出了我認為可行的方法。 實際上,發生的情況是,當用戶輸入數據並按下“提交”按鈕時,應用程序凍結了片刻,然后給我一個“ SqlException”,並提到了一些無法連接的信息。
我不確定我是否正確使用了連接字符串,所以我正在尋求幫助。
這些是我用來構建查詢並建立連接的方法:
private void btn_Submit_Click(object sender, EventArgs e)
{
if (isValidData())
{
//MessageBox.Show("Valid", "All Entries Were Valid!");
//CONVERT FORM VALUES AND STORE IN VARIABLES TO SEND TO MYSQL QUERY
DateTime saleTime = saleDatePicker.Value;
Decimal price = Convert.ToDecimal(txt_Price.Text);
string customerName = txt_CustomerName.Text;
string customerPhone = txt_CustomerPhone.Text;
string description = rTxt_Description.Text;
//Build Query string
string query = "INSERT into SALES VALUES ('" + saleTime + "','" +
price + "','" + customerName + "','" + customerPhone + "','" +
description + "');";
insertValues(query);
}
}
private void insertValues(string q)
{
SqlConnection sqlConnection1 = new SqlConnection("Server=host;Database=dbname;User Id=username;Password=password;");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;
cmd.CommandText = q;
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
reader = cmd.ExecuteReader();
// Data is accessible through the DataReader object here.
sqlConnection1.Close();
}
我不確定您的連接字符串,但是看到您的問題已用MySql標記,那么您需要使用不同的類來與MySql進行對話。 現在,您正在使用的服務器用於與Microsoft Sql Server一起工作。
您需要將SqlConnection
, SqlCommand
和SqlDataReader
更改為名為MySqlConnection
, MySqlCommand
和MySqlDataReader
的MySql副本。 在下載並安裝MySql NET / Connector之后,可以使用這些類,然后設置對MySql.Data.Dll的引用並添加using MySql.Data.MySqlClient;
到你的項目
關於MySql的connectionstring,您還需要遵循規則並使用此站點中說明的關鍵字
這些是使程序可以運行的基本步驟,但是您在這里遇到了很大的問題。 這在sql命令中稱為字符串串聯,此習慣直接導致Sql Injection漏洞 。
您需要將代碼更改為以下內容:
private void btn_Submit_Click(object sender, EventArgs e)
{
if (isValidData())
{
//CONVERT FORM VALUES AND STORE IN VARIABLES TO SEND TO MYSQL QUERY
DateTime saleTime = saleDatePicker.Value;
Decimal price = Convert.ToDecimal(txt_Price.Text);
string customerName = txt_CustomerName.Text;
string customerPhone = txt_CustomerPhone.Text;
string description = rTxt_Description.Text;
// Create the query using parameter placeholders, not the actual stringized values....
string query = "INSERT into SALES VALUES (@stime, @price, @cname,@cphone,@cdesc)";
// Create a list of parameters with the actual values with the placeholders names
// Pay attention to the Size value for string parameters, you need to change it
// accordingly to your fields size on the database table.
List<MySqlParameter> prms = new List<MySqlParameter>()
{
new MySqlParameter {ParameterName="@stime", MySqlDbType=MySqlDbType.DateTime, Value = saleTime },
new MySqlParameter {ParameterName="@price", MySqlDbType=MySqlDbType.Decimal, Value = price },
new MySqlParameter {ParameterName="@cname", MySqlDbType=MySqlDbType.VarChar, Value = customerName, Size = 150 },
new MySqlParameter {ParameterName="@cphone", MySqlDbType=MySqlDbType.VarChar, Value = customerPhone , Size = 150 },
new MySqlParameter {ParameterName="@desc", MySqlDbType=MySqlDbType.VarChar, Value = description , Size = 150 }
};
// Pass query and parameters to the insertion method.
// get the return value. if it is more than zero you are ok..
int result = insertValues(query, prms);
// if(result > 0)
// .... insertion ok ....
}
}
private int insertValues(string q, List<MySqlParameter> parameters)
{
using(MySqlConnection con = new MySqlConnection(....))
using(MySqlCommand cmd = new MySqlCommand(q, con))
{
con.Open();
cmd.Parameters.AddRange(parameters.ToArray());
int rowsInserted = cmd.ExecuteNonQuery();
return rowsInserted;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.