簡體   English   中英

嘗試將數據插入SQL Server數據庫時打開連接的麻煩

[英]Open connection trouble when trying to insert data into SQL Server database

我已經創建了一個帶有密碼請求的Main表單,以根據用戶名登錄到下一個表單。 現在在這里,我制作了帶有標簽的另一種形式。 一個選項卡用於插入數據,另一個選項卡用於檢查數據。

我已經創建了像這樣的圖片形式

這是我的代碼:

`

namespace Kartice
{
    public partial class Matjaz : Form
    {
    //   string KarticaMString = "Data Source=hostname;Initial Catalog=mydatabase;uid=uid;pwd=pwd;Integrated Security=True;";
      // SqlConnection KarticaM = new SqlConnection();
        public Matjaz()
        {
            InitializeComponent();
        }

    private void karticaMBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
    }

    private void usersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
    {
    }

    private void usersBindingNavigatorSaveItem_Click_1(object sender, EventArgs e)
    {
    }

    private void karticaMBindingNavigatorSaveItem_Click_1(object sender, EventArgs e)
    {
    }

    private void Matjaz_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'kartice1.KarticaM' table. You can move, or remove it, as needed.
        this.karticaMTableAdapter.Fill(this.kartice1.KarticaM);

    }

    private void tabPage1_Click(object sender, EventArgs e)
    {

    }

    private void ExitBtn_Click(object sender, EventArgs e)
    {
        Application.Exit();

    }

    private void InsertBtn_Click(object sender, EventArgs e)
    {
        string Sqlquery = null;
       string  KarticaMString = null;

        using (SqlConnection conn = new SqlConnection(KarticaMString))
        {
            {
                Sqlquery = "INSERT INTO KarticaM (DateInsert, DateTransaction, Value, Purpose, DepositLift) VALUES (" + DateInsertPicker.Value + "," + DateTransactionPicker.Value + "," + ValueTxt.Text + "," + PurposeTxt.Text + "," + DepositLiftCombobox.SelectedText + ")";
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(Sqlquery, conn))
                {
                    cmd.Parameters.Add("@DateInsert", SqlDbType.DateTime).Value = DateInsertPicker.Value;
                    cmd.Parameters.Add("@DateTransaction", SqlDbType.DateTime).Value = DateTransactionPicker.Value;
                    cmd.Parameters.Add("@Value", SqlDbType.Money).Value = ValueTxt.Text;
                    cmd.Parameters.Add("@Purpose", SqlDbType.Text).Value = PurposeTxt.Text;
                    cmd.Parameters.Add("DepositLift", SqlDbType.Text).Value = DepositLiftCombobox.SelectedValue;

                    cmd.ExecuteNonQuery();
                    cmd.Connection = conn;
                }
                conn.Close();
            }
        }

    }
  }
}

我收到此錯誤:( 錯誤

盡管您的主要或第一個問題是ConnectionStringnull ,但我也可以從您的代碼中找到其他錯誤:

1.您的ConnectionStringnull

 string  KarticaMString = null;//assign your connection string here    
 using (SqlConnection conn = new SqlConnection(KarticaMString))

解:

在將其分配給SqlConnection對象之前,請分配適當的Connection String

例:

string  KarticaMString = "Data Source=hostname;Initial   
Catalog=mydatabase;uid=uid;pwd=pwd;Integrated Security=True";

2.您的Insert Into語句可以使用SQL Injection進行攻擊。
解決方案:使用Parametrised Queries

3.使用好像你分配參數SqlCommand.Parameters.AddWithValue()它們不會反映到您的sql statement ,除非你指定在SQL語句的參數,直到。

解決方案:首先在insert into語句中添加參數,然后使用SqlCommand.Parameters.AddWithValue()語句將值添加到各個參數中。

4.您將在調用ExecuteNonQuery()語句后分配SqlConnection對象。 解決方案:不需要,因為您之前已經做過。

5. 建議:我的感覺是,您不需要在using{}塊內聲明它時顯式關閉SqlConnection對象,可以通過使用塊來注意對象處置。 解決方案:刪除語句conn.Close();

最終解決方案

private void InsertBtn_Click(object sender, EventArgs e)
    {
       string Sqlquery = null;
       string  KarticaMString = "@Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Bojan\Desktop\Programiranje\School‌​\Kartice\Kartice\Kartice.mdf;Integrated Security=True;User Instance=True";

        using (SqlConnection conn = new SqlConnection(KarticaMString))
        {

                Sqlquery = "INSERT INTO KarticaM (DateInsert, DateTransaction, Value, Purpose, DepositLift) VALUES (@DateInsert,@DateTransaction,@Value,@Purpose,@DepositLift)";
                conn.Open();
                using (SqlCommand cmd = new SqlCommand(Sqlquery, conn))
                {
                    cmd.Parameters.Add("@DateInsert", SqlDbType.DateTime).Value = DateInsertPicker.Value;
                    cmd.Parameters.Add("@DateTransaction", SqlDbType.DateTime).Value = DateTransactionPicker.Value;
                    cmd.Parameters.Add("@Value", SqlDbType.Money).Value = ValueTxt.Text;
                    cmd.Parameters.Add("@Purpose", SqlDbType.Text).Value = PurposeTxt.Text;
                    cmd.Parameters.Add("@DepositLift", SqlDbType.Text).Value = DepositLiftCombobox.SelectedValue;

                    cmd.ExecuteNonQuery();                    
                }


        }

    }

注意:

string KarticaMString = null;

using (SqlConnection conn = new SqlConnection(KarticaMString))
{
    ...
}

連接字符串KarticaMString顯然為null 您必須向SqlConnection構造函數提供有效的連接字符串。 有關如何編寫有效的連接字符串或使用SqlConnectionStringBuilder更多信息,請參見ConnectionString

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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