Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我犯了这个错误;查询值和目标字段的数量不相同;_C#_.net_Oledb - Fatal编程技术网

C# 我犯了这个错误;查询值和目标字段的数量不相同;

C# 我犯了这个错误;查询值和目标字段的数量不相同;,c#,.net,oledb,C#,.net,Oledb,我得到了这个错误: 插入到语句中的语法错误 这是正确的另一个是SQL抱歉 //Server Connection private void ServerConnect() { string ConnString; ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PLAN.accdb"; TConn = new OleDbConnection(ConnString); TConn.Open();

我得到了这个错误:

插入到语句中的语法错误

这是正确的另一个是SQL抱歉

//Server Connection
private void ServerConnect()
{
    string ConnString;
    ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=PLAN.accdb";
    TConn = new OleDbConnection(ConnString);
    TConn.Open();
    MessageBox.Show("You Are Connected.");
    TConn.Close();
}

//ADD MEMOS
private void GetMemoList()
{
    string query;
    DataSet ds = new DataSet();
    query = "SELECT MEMO_ID,DATE,TIME,MEMOS FROM TBLMEMO ORDER BY DATE ASC";
    OleDbDataAdapter da = new OleDbDataAdapter(query, TConn);
    da.Fill(ds);
    this.dgv1.DataSource = ds.Tables[0];
}

private void AddMemo(string MemoDate, string MemoTime, string Memos)
{
    TConn.Open();

    string acc;
    acc = "INSERT INTO TBLMEMO (DATE,TIME,MEMOS) VALUES (@Memodate,@MemoTime,@Memos)";
    OleDbCommand cmd = new OleDbCommand(acc, TConn);
    cmd.Parameters.AddWithValue("@memDate", MemoDate);
    cmd.Parameters.AddWithValue("@memTime", MemoTime);
    cmd.Parameters.AddWithValue("@memos", Memos);
    cmd.ExecuteNonQuery();
    TConn.Close();
}

private void btnAddMemos_Click(object sender, EventArgs e)
{
    AddMemo(this.dtpDate.Value.ToShortDateString(), this.dtpTime.Value.ToShortTimeString(), this.txtInfo.Text.Trim());
    GetMemoList();
    txtInfo.Clear();
}

表TBLMEMO中可能有三个以上的字段,但您只插入了三个字段。这就是为什么会出现这样的错误:“查询值和目标字段的数量不一样。”

试一试


尝试在查询中指定字段

acc = "INSERT INTO TBLMEMO (fld1Name, fld2Name, fld3Name) VALUES ('" + MemoDate + "','" + MemoTime + "','" + Memos + "')";

始终在INSERT语句中指定目标列。您还需要在语句中使用参数来避免Sql注入攻击

var acc = "INSERT INTO TBLMEMO (DATE, TIME, MEMOS) VALUES (@date, @time, @memos)";
TConn.Open();
var cmd = new SqlCommand(acc, TConn);
cmd.Parameters.AddWithValue("date", MemoDate);
cmd.Parameters.AddWithValue("time", MemoTime);
cmd.Parameters.AddWithValue("memos", Memos);
cmd.ExecuteNonQuery();
TConn.Close();

表的主键可能未设置为自动递增

表的结构是什么?@Timart-可能在您的表中某些列不为空,并且您没有在insert语句中插入该列值,因此您必须更改表结构,或者,如果不需要该列,可以插入一些伪值。。。当我在cmd.ExecuteNonQuery()中使用该代码时;OleException是语法错误插入语句。您能否提供完整的异常详细信息。查看TBLMEMO的CREATETABLE语句和您执行的完整代码也会很有帮助。您是否修改了insert以匹配我提供的代码?你发布的消息来源表明没有。我已经修改了我的答案以匹配你的列名。但是仍然有错误。你是否有facebook PLS帮助我在我的论文中使用它?我知道现在你没有运行SQL Server数据库,了解您连接的数据库很重要,因为INSERT命令的语法可能不同。我已经这样做了,但错误仍然是Systax error INSERT INTO
var acc = "INSERT INTO TBLMEMO (DATE, TIME, MEMOS) VALUES (@date, @time, @memos)";
TConn.Open();
var cmd = new SqlCommand(acc, TConn);
cmd.Parameters.AddWithValue("date", MemoDate);
cmd.Parameters.AddWithValue("time", MemoTime);
cmd.Parameters.AddWithValue("memos", Memos);
cmd.ExecuteNonQuery();
TConn.Close();