2013-03-27 143 views
-2

如何在.sdf數據庫中插入表格?插入SQL Server CE數據庫

我已經試過如下:

string connection = @"Data Source=|DataDirectory|\InvoiceDatabase.sdf"; 
SqlCeConnection cn = new SqlCeConnection(connection); 

try 
{ 
    cn.Open(); 
} 
catch (SqlCeException ex) 
{ 
    MessageBox.Show("Connection failed"); 
    MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error); 
    Application.ExitThread(); 
} 

string clientName = txt_ClientName.Text; 
string address = txt_ClientAddress.Text; 
string postcode = txt_postcode.Text; 
string telNo = txt_TelNo.Text; 

string sqlquery = ("INSERT INTO Client (Name,Address,Postcode,Telephone_Number)Values(" + clientName + "','" + address + "','" + postcode + "','" + telNo + ")"); 
SqlCeCommand cmd = new SqlCeCommand(sqlquery, cn); 

try { 
    int affectedRows = cmd.ExecuteNonQuery(); 

    if (affectedRows > 0) 
    { 
    txt_ClientAddress.Text = ""; 
    txt_ClientName.Text = ""; 
    txt_postcode.Text = ""; 
    txt_TelNo.Text = ""; 
    MessageBox.Show("Client: " + clientName + " added to database. WOoo"); 
    } 
} 
catch(Exception){ 
    MessageBox.Show("Insert Failed."); 
} 

但它似乎並不無論我做什麼,它只是顯示「插入失敗」。

在此先感謝。

+1

請抓住混凝土異常並在這裏發佈消息 – Tomtom 2013-03-27 13:33:53

回答

1

您的SQL語句不正確。

string sqlquery = ("INSERT INTO Client (Name,Address,Postcode,Telephone_Number)Values('" + clientName + "','" + address + "','" + postcode + "','" + telNo + "')"); 

拿着這個。你忘了'在開始和結束的價值

2

這是老一套的故事。當你建立一個sql命令連接字符串這些種類的錯誤豐富。簡單的語法問題並不是最糟糕的。 Sql Injection是最危險的。

請構建查詢這樣

string sqlquery = ("INSERT INTO Client (Name,Address,Postcode,Telephone_Number)" + 
        "Values(@client,@address, @postcode, @tel)"; 
SqlCeCommand cmd = new SqlCeCommand(sqlquery, cn); 
cmd.Parameters.AddWithValue("@client", clientName); 
cmd.Parameters.AddWithValue("@address", address); 
cmd.Parameters.AddWithValue("@postcode", postcode); 
cmd.Parameters.AddWithValue("@tel", telNo); 
cmd.ExecuteNonQuery(); 

正如其他人已經說過你的語法錯誤被忽略初始單引號引起的。但是你可能有其他錯誤。例如,一個叫O'Hara的客戶呢?現在你在客戶端裏面有一個單引號,這會對你的字符串連接造成嚴重影響。 代替參數將被準確地解析,發現每存在問題的字符將被適當地處理(在這種情況下,單引號加倍)

+2

+1000000如果我可以 - 不能同意更多;如果今天有人仍在教學生將他們的SQL語句連接在一起 - 他應該用羽毛搔癢死去...... – 2013-03-27 13:44:52

+1

@marc_s:我認爲勺子會更合適。 – NotMe 2013-03-27 16:19:23

0

要插入數據到SQL,數據類型應該被考慮。如果你插入一個字符串值(varchar),你必須用單引號括起來,比如''+ full_Name +'',但是整數類型不需要這個。例如

string myQuery = "INSERT INTO Persons (phone, fullname) VALUES ("+telNo+",'"+full_Name+"')"; 

其中全名是字符串變量和電話號碼,只有號碼。