簡體   English   中英

使用C#連接並插入到SQL Server 2012

[英]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);
    }
}

因此,此代碼存在很多問題。 最好再花一個小時左右,然后發布您無法解決的任何特定問題。 讓我給您一些快速的指示。

  1. 您有一個catch()塊,但是匹配的try塊已被注釋掉。 這將導致編譯器錯誤。 看來您只是在調試一些東西,所以沒什么大不了的。 但是,發布您要運行的實際代碼通常是明智的。

  2. 您正在將字符串初始化為null ,但是將其連接到末尾。 這將導致運行時錯誤。 您應該將字符串初始化為String.Empty 另外,如果您要進行大量的字符串連接,則查看StringBuilder類,因為它的速度要快得多。

  3. 從理論上講,您正在構建SQL字符串,但實際上從未在任何地方運行它。 您也不會將值返回任何可以運行它的值。

  4. 您的INSERT語句甚至無效。 您在INSERT語句中沒有匹配的end ) ,並且在變量之后有一個rogue ) ,這將導致編譯器錯誤。 您還可以將所有變量混在一起,而不必在它們之間加上引號或逗號。 您可能想要更多類似的東西:

    sql += String.Format("INSERT into Student VALUES('{0}', '{1}', '{2}');", StudentId, Name, Address);

  5. 使用參數化查詢。 總是。 誰在乎你的老師怎么說。 如果您至少沒有這樣做,請首先檢查字符串中是否存在撇號,因為這會通過過早結束字符串來破壞SQL語句。

  6. 您的循環似乎沒有多大意義。 什么是counter1 它有什么價值? 即使將其設置為正值,您所做的就是一次又一次地構建相同的SQL字符串,因為循環內的值不會更改。 目前尚不清楚您要在這里做什么。

  7. 您正在調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM