【问题标题】:Insert Into error c#, access插入错误c#,访问
【发布时间】:2016-02-25 09:30:28
【问题描述】:

我正在尝试插入一条记录以访问数据库,但在 insert into 语句中不断出现语法错误。

请帮帮我。

try
{
    cnn.Open();
    OleDbCommand savea = new OleDbCommand();
    savea.Connection = cnn;
    savea.CommandText = "INSERT INTO FirstYear(LastName, FirstName,       MiddleName, ContactNumber, Age, BirthDateYear, HomeAddress, Gender, Religion,     Citizenship, GuardianName, GuardianContactNum, RelationtoStudent, Work,     GuardianHomeAddress) values ('" + lastname.Text + "' , '" + firstname.Text + "'     , '" + middlename.Text + "' , " + contactnum.Text + " , " + age.Text + " , '" +     dateTimePicker1.Text + "' , '" + homeadd.Text + "' , '" + gender.Text + "' , '"     + religion.Text + "', '" + citizenship.Text + "' , '" + fullname.Text + "' , " +     gcontactnum.Text + " , '" + rrelation.Text + "' , '" + work.Text + "' , '" +     ghomeadd.Text + "')";
    int temp = savea.ExecuteNonQuery();

    if (temp > 0)
    {
        MessageBox.Show("Successfully Submitted");
    }
}

catch (Exception ex)
{
    MessageBox.Show("Error" + ex);
}

cnn.Close();

【问题讨论】:

  • 什么错误?请使用参数,不要连接字符串。那样你会惹上麻烦的。
  • 如果您仔细查看您的插入语句,您会发现'' 的一些不匹配
  • Sql 命令似乎格式错误 - 仔细重写。
  • 错误提示“INSERT INTO 语句中的 Sntax 错误”。一直在尝试修复它 2 小时。我修复了所有的 '" 但没有用。

标签: c# ms-access


【解决方案1】:

使用这个,我认为问题是字符串格式。也是传递值的用户参数,这种方式通过连接字符串,您将容易受到黑客攻击(Sql Injection)

savea.CommandText = "INSERT INTO FirstYear(LastName, FirstName, MiddleName, ContactNumber, Age, BirthDateYear, HomeAddress, Gender, Religion,     Citizenship, GuardianName, GuardianContactNum, RelationtoStudent, Work, GuardianHomeAddress) values ('" + lastname.Text + "' , '" + firstname.Text + "'     , '" + middlename.Text + "' , '" + contactnum.Text + "' , '" + age.Text + "' , '" +     dateTimePicker1.Text + "' , '" + homeadd.Text + "' , '" + gender.Text + "' , '"     + religion.Text + "', '" + citizenship.Text + "' , '" + fullname.Text + "' , '" +     gcontactnum.Text + "' , '" + rrelation.Text + "' , '" + work.Text + "' , '" +     ghomeadd.Text + "')";

但我建议你遵循以下编码风格,

string sqlQuery= "INSERT INTO FirstYear(LastName, FirstName, MiddleName, ContactNumber, Age, BirthDateYear, HomeAddress, Gender, Religion,     Citizenship, GuardianName, GuardianContactNum, RelationtoStudent, Work, GuardianHomeAddress) values (@Lastname, @Firstname, @MiddleName, @ContactNumber, @Age, @BirthDateYear, @HomeAddress, @Gender, @Religion, @Citizenship, @GuardianName, @GuardianContactNum, @RelationtoStudent, @Work, @GuardianHomeAddress  )";

using (var cmd = new OleDbCommand(sqlQuery, connectionString))
{
  cmd.Parameters.Add("@Lastname", OleDbType.VarChar).Value = lastname.Text;
  cmd.Parameters.Add("@Firstname", OleDbType.VarChar).Value = firstname.Text;
 // ... so on
 cmd.ExecuteNonQuery();
}

【讨论】:

  • 我对别人使用了双引号,因为要输入的值是一个数字。我试过了,没用。
  • 这是来自 Izzy -1 的复制粘贴
  • @KennethPrincipe 因为它只是连接它是否是一个数字并不重要,因为你的目标是最终得到一个字符串
  • @Reddy 我试过你的编码风格,它没有出错,但同时它没有保存在我的数据库中。我完全按照你的代码。
  • 字符串方式还是参数化方式?
【解决方案2】:

你有很多 '' mismatches 。目前您的代码也容易受到 Sql Injection 的影响,请始终使用参数。还可以使用using 块来确保对象被正确关闭和处理

string myQuery = "INSERT INTO FirstYear(LastName, FirstName, ...) values (@Lastname, @Firstname, ... )";

using (var cmd = new OleDbCommand(myQuery, connectionString))
{
  cmd.Parameters.Add("@Lastname", OleDbType.VarChar).Value = lastname.Text;
  cmd.Parameters.Add("@Firstname", OleDbType.VarChar).Value = firstname.Text;
  ...
}

【讨论】:

    【解决方案3】:

    可能的错误(如果你给出错误文本,我可以说得更具体)

    1. 参数数量无效。为了避免它使用 string.Format

      savea.CommandText = string.Format("插入 FirstYear({0}, {1}, ...) 值('{10}', '{11}'...)", "LastName" , "FirstName", ..., lastname.text, firstname.text, ...)

    2. 无效的连接字符串。请参阅 connectionstrings.com

    3. 转义你的字符串

      firstname.text.Replace("'", "''")

    【讨论】:

      【解决方案4】:

      缺少一些 ' 字符,这可能是原因。无论如何,我会使用参数而不是字符串连接来避免注入攻击

      savea.CommandText = "INSERT INTO FirstYear(LastName, FirstName,MiddleName ...)  values (@LastName, @FirstName,MiddleName ...)";
      savea.Parameters.Add("@LastName", OleDbType.VarChar).Value = lastname.Text ;
      savea.Parameters.Add("@FirstName", OleDbType.VarChar).Value = firstname.Text;
      savea.Parameters.Add("@MiddleName", OleDbType.VarChar).Value = middlename.Text;
      ...
      

      【讨论】:

        【解决方案5】:

        如果您想使用此语法,请更正下面突出显示的错误。

        【讨论】:

          猜你喜欢
          • 2018-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多