2012-08-31 122 views
0

我想了解如何獲取控制值並將它們插入到數據庫表中。例如,我有一個名爲NameBox的文本框。我想從該文本框中獲取文本並將其添加到數據庫表中。以2個文本框值插入到SQL Server數據庫

我不是試圖做到最好的方式,但最簡單的,所以我可以通過頭圍繞概念包裝。到目前爲止,我有:

<asp:TextBox ID="NameBox" runat="server"></asp:TextBox> 
<asp:TextBox ID="EmailBox" runat="server"></asp:TextBox> 

這裏是代碼隱藏。

我越來越
protected void Button1_Click(object sender, EventArgs e) 
{ 
    string name1 = NameBox.Text; 
    string email1 = EmailBox.Text; 

    System.Data.SqlClient.SqlConnection sqlConnection1 = 
    new System.Data.SqlClient.SqlConnection(@"Data Source=E:\*********.com1.5\**********.com\App_Data\Home.sdf;"); 

    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(); 
    cmd.CommandType = System.Data.CommandType.Text; 
    cmd.CommandText = "INSERT INTO CustomerList (Name, Email) VALUES (" + name1 + "," + email1 + ")"; 
    cmd.Connection = sqlConnection1; 

    sqlConnection1.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlConnection1.Close(); 
} 

錯誤消息

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

我GOOGLE了錯誤信息,很多是我一直在讀的喊着我的連接可能是錯誤的。我試着通過使用一些拖放控件來測試它,並且我有一個使用相同連接字符串的中繼器。

現在我甚至不知道這是否正確。我相信你們都可以在某個方面或某個方面有所聯繫,我希望看到它在一個非常簡單的層面上工作,所以我可以開始玩它,看看它是如何工作的。

+4

兩個詞:參數化查詢 – LittleBobbyTables

+0

作爲閱讀你發現表明,它有連接問題,所以它要麼你的連接字符串,或者,你可以找一些環境因素訪問它。而對於皮特的愛...參數化! –

+2

但是從那裏SQL查詢不正確;字符串沒有被撇號包圍,並且即使它們是注入攻擊也很容易受到攻擊。請參閱:http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html – LittleBobbyTables

回答

0

只需複製粘貼用於中繼器代碼的連接字符串,然後將其粘貼到Button1_Click代碼中,在該代碼中創建新連接。可能有一個額外的空間,或一些大寫字母不匹配。而對於插入,我會在數據庫中創建一個存儲過程,該過程使用Name和Email參數,並使用SqlCommand來執行存儲過程。

CREATE PROCEDURE INSERT_NAME_EMAIL_DATA 
    @NAME VARCHAR(100) NULL, 
    @EMAIL VARCHAR(100) NULL 
AS 
BEGIN 
     INSERT INTO CustomerList (Name, Email) VALUES (@NAME, @EMAIL) 
END 

而在你的代碼,你可以通過做執行存儲過程:在建立SQL Server的連接發生

cmd.CommandType = System.Data.CommandType.StoredProcedure; 
cmd.Parameters.Add(
    new SqlParameter("@NAME", name1)); 
cmd.Parameters.Add(
    new SqlParameter("@EMAIL", email1)); 
cmd.Connection = sqlConnection1; 

     sqlConnection1.Open(); 
     cmd.ExecuteNonQuery(); 
     sqlConnection1.Close(); 
+0

不是我,除非我意外發生。 – jackncoke

4

連接字符串推斷你使用SQL Server精簡版 - 在這種情況下要使用SQLCeCommandSQLCeConnection代替。請考慮使用參數化查詢,而不是將字符串連接在一起 - 這對性能和安全性更好。有關SQL注入的更多背景信息,請閱讀this link - 目前您很容易受到這種攻擊。

+0

是的,我知道這一點。這不會看到運行時間。我正在努力教我的自我。感謝您的反饋,我想查看此內容並閱讀您的推薦鏈接。 – jackncoke

0

與網絡相關的或特定於實例的錯誤。服務器未找到或無法訪問。驗證實例名稱是否正確,並將SQL Server配置爲允許遠程連接。 (提供者:SQL網絡接口,錯誤:26 - 錯誤定位指定的服務器/實例)

對於上述錯誤,你必須要服務的窗口,如下

按Windows + R

重啓SQLSERVER實例

類型的服務。MSC +輸入

找到你的sqlserver的實例,並重新啓動它

相關問題