2012-10-15 99 views
1

我使用一個簡單的表格測試了一些數據庫壓縮代碼以將數據添加到數據庫。 當我點擊AddBtn時,我想要的只是從文本字段中插入一些值到我的數據庫中,但是卻出現此錯誤「初始化字符串的格式不符合從索引0開始的規範。」而問題似乎在SqlCeConnection行內。C#數據庫壓縮連接錯誤

完整代碼示例:

using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.Data; 
    using System.Drawing; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Windows.Forms; 
    using System.Data.Sql; 
    using System.Data.SqlClient; 
    using System.Data.SqlServerCe; 

    namespace WindowsFormsApplication1 
    { 
     public partial class Form1 : Form 
     { 
      public Form1() 
      { 
     InitializeComponent(); 
      } 

      private void AddBtn_Click(object sender, EventArgs e) 
      { 
       SqlCeConnection con = new SqlCeConnection(@"C:\Users\Name\Documents\Visual Studio   2012\Projects\DataBaseTest\MyDatabase#1.sdf"); 
       try { 
        con.Open(); 

        SqlCeCommand cmd = con.CreateCommand(); 

        cmd.CommandText = "insert into test ([ID], [OrderID], [KundID]) values('"+textBox1.Text+"','"+textBox2.Text+"','"+textBox3.Text+"')"; 

        try { 
         cmd.ExecuteNonQuery(); 
        } 
        catch (Exception ex) { 
         MessageBox.Show(ex.Message); 
        } 


       } 
       catch (Exception ex) { 
        MessageBox.Show(ex.Message); 
       } 
      } 
     } 
    } 

回答

3

您沒有使用有效的連接字符串(路徑自衛隊前加'Data Source=' 。 爲SqlCeConnection請參閱MSDN文檔。

SqlCeConnection con = new SqlCeConnection(@"Data Source=C:\Users\Name\Documents\Visual Studio   2012\Projects\DataBaseTest\MyDatabase#1.sdf" 

除此之外,不直接在查詢中使用的按鈕文本(讓你打開到SQL注入攻擊)使用SQL參數,而不是(再次MSDN是你的朋友。)

+0

啊,嘗試使用數據源早些時候導致什麼「連接字符串」應該是根據VS12 ..當時肯定是其他一些錯誤,感謝清除它,工作完美:),我知道注射,但我想要的是目前是一個工作數據庫,因爲Im是所有這些的新成員。 – Jacco

5

是您的連接字符串是錯誤的。這裏http://www.connectionstrings.com/sql-server-2005-ce


看起來糾正一個應該是

string pathSDF = @"C:\Users\Name\Documents\Visual Studio 2012" + 
        "\Projects\DataBaseTest\MyDatabase#1.sdf"; 
SqlCeConnection con = new SqlCeConnection("Data Source=" + pathSDF + 
              ";Persist Security Info=False;"); 

除此之外,你的SQL命令是非常危險的。你不應該編寫sql命令連接直接從用戶輸入中獲取的字符串。這導致Sql Injection Attacks
更改您的代碼:(我假設你的ID字段是數值型而不是VARCHAR處理的)

cmd.CommandText = "insert into test ([ID], [OrderID], [KundID]) values " + 
        "(@userID, @orderID, @kundID)"; 

    cmd.Parameters.AddWithValue("@userID", Convert.ToInt32(textBox1.Text)); 
    cmd.Parameters.AddWithValue("@orderID", Convert.ToInt32(textBox2.Text)); 
    cmd.Parameters.AddWithValue("@kundID", Convert.ToInt32(textBox3.Text)); 
+0

毆打一拳... –

+0

嗯,我意識到注射,只是暫時測試它,計劃在未來看這個,但感謝的信息:) – Jacco