簡體   English   中英

我無法在C#上向SQL數據庫添加文本

[英]I can't add text to sql database on c#

我無法從SQL數據庫的網站添加文本

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString);
    String insert = "INSERT INTO dbo.Table (Name,Surname,Email,Mobile,Telephone) VALUES (@name,@surname,@email,@mobile,@telephone)";
    SqlCommand command = new SqlCommand(insert, connection);

    command.Parameters.AddWithValue("@name", Name.Text);
    command.Parameters.AddWithValue("@surname", Surname.Text);
    command.Parameters.AddWithValue("@email", Email.Text);
    command.Parameters.AddWithValue("@mobile", Mobile.Text);
    command.Parameters.AddWithValue("@telephone", Telephone.Text);
    connection.Open();
    command.ExecuteNonQuery();
    connection.Close();
}
}

它向我顯示此錯誤的“ /”應用程序中的服務器錯誤。 關鍵字“表格”附近的語法不正確。

說明:執行當前Web請求期間發生未處理的異常。 請查看堆棧跟蹤,以獲取有關錯誤及其在代碼中起源的更多信息。

異常詳細信息:System.Data.SqlClient.SqlException:關鍵字'Table'附近的語法不正確。

源錯誤:

Line 25:      command.Parameters.AddWithValue("@telephone", Telephone.Text);
Line 26:         connection.Open();
Line 27:         command.ExecuteNonQuery();
Line 28:         connection.Close();
Line 29:     }

在第27行出現錯誤,請幫助我...

數據庫服務器告訴您在不應該出現的地方使用了關鍵字Table 通過將其包裝在括號中,您可以使數據庫服務器確信TableTable的名稱: [Table]

編輯:如果您使用的是MySQL,則可能要使用

String insert = "INSERT INTO `Table` (Name,Surname,E...

代替。

首先,請注意SqlConnection是SQL Server的ADO.Net客戶端,而不是MySQL。 如果確實需要連接到MySQL,則需要: MySqlConnection

確保“ 表”的實際名稱。 如果是這樣,請像下面那樣逃避它: [表]

另外,不要忘記配置連接:

using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString2"].ConnectionString))
     {
            String insert = "INSERT INTO [dbo].[Table] (Name,Surname,Email,Mobile,Telephone) VALUES (@name,@surname,@email,@mobile,@telephone)";
            SqlCommand command = new SqlCommand(insert, connection);

            command.Parameters.AddWithValue("@name", Name.Text);
            command.Parameters.AddWithValue("@surname", Surname.Text);
            command.Parameters.AddWithValue("@email", Email.Text);
            command.Parameters.AddWithValue("@mobile", Mobile.Text);
            command.Parameters.AddWithValue("@telephone", Telephone.Text);
            connection.Open();
            command.ExecuteNonQuery();
    }

問題在於Table是SQL中的保留字。 因此,系統認為這是命令而不是表的名稱。 如果要將表的名稱更改為MyTable,則代碼將正常工作(假設其他地方沒有其他錯誤)。

此代碼適用於測試數據庫和更新的表名稱:

INSERT INTO MyTable (Name,Surname,Email,Mobile,Telephone) 
VALUES (@name,@surname,@email,@mobile,@telephone);

如果您想知道使用TSQL時應避免使用的單詞,請參見以下指向MSDN的鏈接: https : //msdn.microsoft.com/zh-cn/library/ms189822.aspx

盡管按照另一位受訪者的建議,您可以轉義使用表名,但最好不要這樣做。 這是一種非常不好的代碼氣味,以后可能導致許多其他問題和混亂。 取而代之的是,提供一個更有意義的名稱並描述其內容-在您的示例和所提供的列的情況下,“聯系方式”可能是更好的選擇?

暫無
暫無

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

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