【问题标题】:Unable to insert into sql server in windows authentication无法在 windows 身份验证中插入 sql server
【发布时间】:2017-03-17 15:14:32
【问题描述】:
private DateTime currentDate;
private string strInsert;
private SqlCommand sqlCmd;
private SqlConnection hookUp;

protected void EnterData(object sender, EventArgs e)
{
    currentDate = DateTime.Now;
    hookUp = new SqlConnection("Server=DESKTOP-BDL7T9A;Database=Vote;" 
                      +  "Integrated Security=True;");        

    strInsert = " INSERT INTO Supporters (LastName,FirstName,";
    strInsert += "E-mail,Donation,DateLastContact)VALUES";
    strInsert += "(@LName,@FName,@Em,@Donate,@NowDate)";

    sqlCmd = new SqlCommand(strInsert, hookUp);
    sqlCmd.Parameters.AddWithValue("@LName",LName.Text);
    sqlCmd.Parameters.AddWithValue("@FName",FName.Text);
    sqlCmd.Parameters.AddWithValue("@Em",Em.Text);
    sqlCmd.Parameters.AddWithValue("@Donate",Donate.Text);
    sqlCmd.Parameters.AddWithValue("@NowDate",currentDate);

    hookUp.Open();
    sqlCmd.ExecuteNonQuery();
    hookUp.Close();

    Lbl1.Text = "Data has been sent";
}

我尝试在 Windows 身份验证模式下。当我使用 sqlDatabase 服务器运行此代码时,它会在我尝试提交时显示错误:

'-' 附近的语法不正确

当我运行这个程序并在数据库连接时输入数据时,它会显示同样的错误。

【问题讨论】:

    标签: c# sql ado.net


    【解决方案1】:

    对于带有-的字段名称,您需要使用方括号(分隔标识符):

    strInsert += "[E-mail],Donation,DateLastContact)VALUES";
    

    延伸阅读:MSDN Database Identifiers.

    您可以找到常规标识符的规则:

    1. 不允许嵌入空格或特殊字符。

    在 Transact-SQL 语句中使用标识符时,不符合这些规则的标识符必须用双引号或括号分隔。

    还请注意,您可以使用 逐字字符串 来跨越多行代码的字符串文字:

      strInsert = @"INSERT INTO Supporters 
                   (LastName,FirstName,[E-mail],Donation,DateLastContact)
                   VALUES (@LName,@FName,@Em,@Donate,@NowDate)";
    

    【讨论】:

    • 感谢先生的帮助,您让我的代码运行起来,我几乎放弃了编码,但您解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多