[英]Using C# to connect and insert to SQL Server 2012
我正在研究一些代碼,以嘗試獲取用戶輸入的數組以連接並發送到SQL Server2012。有人告訴我要使用所有這些命令來連接數據庫。
我的問題之一是,我一直在研究Stack Overflow,並且每個人都建議使用參數而不是進行連接以避免SQL注入,但這是針對我的班級的,我們進入C#的時間只有2周,所以我認為他不會如果我使用參數就喜歡它。
我認為我的try catch是錯誤的,上半部分用紅線填充,並且如何將INSERT命令與for循環一起使用?
protected void btnDisplay_Click(object sender, EventArgs e)
{
//try
//{
// System.Data.SqlClient.SqlConnection varname1 = new System.Data.SqlClient.SqlConnection();
// varname1 = "server = LOCALHOST"; Database = Lab1; Trusted_connection = yes;
// varname1.Open();
// System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
// cmd.Connection = conn;
// cmd.CommandText = "Delete From Student";
// cmd.ExecuteNonQuery();
//
string sql = null;
for(int i=0; counter1 >= i; i++)
{
sql += "INSERT into Student VALUES(" + StudentId + Name + Address);
}
varname1.Close();
//}
catch (SqlException ex)
{
MessageBox.Show("Database failed" + ex.Message);
}
}
因此,此代碼存在很多問題。 最好再花一個小時左右,然后發布您無法解決的任何特定問題。 讓我給您一些快速的指示。
您有一個catch()
塊,但是匹配的try
塊已被注釋掉。 這將導致編譯器錯誤。 看來您只是在調試一些東西,所以沒什么大不了的。 但是,發布您要運行的實際代碼通常是明智的。
您正在將字符串初始化為null
,但是將其連接到末尾。 這將導致運行時錯誤。 您應該將字符串初始化為String.Empty
。 另外,如果您要進行大量的字符串連接,則查看StringBuilder
類,因為它的速度要快得多。
從理論上講,您正在構建SQL字符串,但實際上從未在任何地方運行它。 您也不會將值返回任何可以運行它的值。
您的INSERT
語句甚至無效。 您在INSERT語句中沒有匹配的end )
,並且在變量之后有一個rogue )
,這將導致編譯器錯誤。 您還可以將所有變量混在一起,而不必在它們之間加上引號或逗號。 您可能想要更多類似的東西:
sql += String.Format("INSERT into Student VALUES('{0}', '{1}', '{2}');", StudentId, Name, Address);
使用參數化查詢。 總是。 誰在乎你的老師怎么說。 如果您至少沒有這樣做,請首先檢查字符串中是否存在撇號,因為這會通過過早結束字符串來破壞SQL語句。
您的循環似乎沒有多大意義。 什么是counter1
? 它有什么價值? 即使將其設置為正值,您所做的就是一次又一次地構建相同的SQL字符串,因為循環內的值不會更改。 目前尚不清楚您要在這里做什么。
您正在調用varname1.Close();
但是您已經注釋掉了varname1
的聲明,這將導致編譯器錯誤。
希望這可以幫助!
這是你所追求的。 您可能需要調整其中的一些。 很抱歉,如果它不能完全正常工作,目前還沒有調試器。
class Data {
public int StudentId {get;set;}
public string Name {get;set;}
public string Address {get;set;}
}
protected void btnDisplay_Click(object sender, EventArgs e)
{
var datas = new List<Data>();
try
{
StringBuilder sql = new StringBuilder();
foreach(data in datas)
{
sql.Append(String.Format("INSERT into Student VALUES({0},'{1}','{2}') ",data.UserId,data.Name,data.Address));
}
var sqlConnection = new SqlConnection(@"Data Source=LOCALHOST;Initial Catalog=Lab1;Trusted_Connection=True;");
sqlConnection.Open();
var command = new SqlCommand(sql.ToString(),sqlConnection);
command..ExecuteNonQuery();
sqlConnection.Close();
}
catch(SqlException ex){
MessageBox.Show("Database failed" + ex.Message);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.