【问题标题】:Syntax error in this method button C#?此方法按钮 C# 中的语法错误?
【发布时间】:2011-05-13 11:41:48
【问题描述】:

我需要你的帮助,我找不到错误,这是紧急情况,这是我的方法 和错误的图像错误说“语法错误INSERT INTO语句”这里是一个图像,我该如何修复它,无论它的结构如何

http://img718.imageshack.us/img718/8864/erroruh.jpg

private void btnCronograma_Click(object sender, EventArgs e)
{
  string connstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\amaury\\Documents\\TEC\\Septimo Semestre\\Administracion de proyectos de ingenieria de softwaere\\nuevo4\\nuevo\\Office\\Office\\Policias.accdb";
  using (OleDbConnection conn = new OleDbConnection(connstring))
   {
    conn.Open();

    string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES(@idProyecto , @idMes , @meta, @real)";
    OleDbCommand cmd = new OleDbCommand(sql, conn);

  foreach (DataGridViewRow row in dataGridView8.Rows)
  {
    DataGridViewComboBoxCell combo3 = row.Cells["idProyecto"] as DataGridViewComboBoxCell;
    DataGridViewComboBoxCell combo4 = row.Cells["idMes"] as DataGridViewComboBoxCell;

    if (combo3 == null || combo4 == null)
    {
        MessageBox.Show("No se pudo convertir");
        continue;
    }

  int idProyecto = int.Parse(combo3.Value.ToString());
  int idMes = int.Parse(combo4.Value.ToString());
  int meta = int.Parse(row.Cells[3].Value.ToString());
  int real = int.Parse(row.Cells[4].Value.ToString());  

  cmd.Parameters.Clear();
  cmd.Parameters.AddWithValue("@idProyecto", idProyecto);
  cmd.Parameters.AddWithValue("@idMes", idMes);
  cmd.Parameters.AddWithValue("@meta", meta);
  cmd.Parameters.AddWithValue("@real", real);


  cmd.ExecuteNonQuery();
  }
}
}

【问题讨论】:

  • 我很确定这些值应该是VALUES (?,?,?,?)
  • 您如何进一步解释?您的意思是更改 VALUES (?,?,?,?) 的值部分
  • 我认为 remou 的意思是 Access 不支持命名参数(如@meta)
  • 不是ODBC不支持命名参数吗?
  • @David-W-Fenton OLEDB,上面使用,不支持 MS Access (msdn.microsoft.com/en-us/library/8e5545e1.aspx) 的命名参数,但据我所知,支持 SQL Server (msdn.microsoft.com/en-us/library/yy6y35y8(VS.71).aspx ),所以说“Access 不支持命名参数”可能不是完整的故事,但对于这篇文章的评论来说似乎足够合理。

标签: c# ms-access syntax-error


【解决方案1】:

错误信息很清楚:INSERT INTO 语句中的错误。

我没有看到任何 SQL 语法问题,所以我猜它是关于保留字的,尝试使用 [] 转义它们:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
             VALUES(@idProyecto , @idMes , @meta, @real)";

结合 Remou 对命名参数的观察,就变成了:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
             VALUES(?, ?, ?, ?)";

并且您必须非常小心地以正确的顺序添加参数。

【讨论】:

  • 非常感谢它有效!!,我仍然有疑问如何控制异常?它显示一条消息:System.NullReferenceException:对象引用未设置为对象的实例。
  • 最好提出一个新问题。并尝试只发布相关部分。
【解决方案2】:

由于您使用的是 OLEDB 提供程序,因此您可能必须使用“?”参数符号。您可以尝试以下查询:

string sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, [meta], [real]) 
         VALUES(?, ? , ?, ?)";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 2015-11-27
    • 1970-01-01
    相关资源
    最近更新 更多