关于用C#向ACCESS中插入一条记录出现的问题!请高手解决一下!急!急!急!

wilson.sea 2003-07-19 04:26:39
本人直接执行SQL语句向ACCESS数据库表中插入一条记录
SQL=“Insert into SYSUSER(ID,NAME,DESCR,DEPARTMENT,PWD,RULE,CATEGORY,PHONE,FAX,MEMO,ISGROUP) Values(1016,'jcy','jcy','jcy','jcy','jcy','jcy','68764','657646','jcy',0)”;
没有问题可以插入一条(ID和ISGROUP为数字型,其他为文本型)

但是如果用程序执行时!代码如下:
连接串:String ConStr="Provider = Microsoft.Jet.OLEDB.4.0;Data Source =数据库名";

String SQLStr=SQL上面的SQL语句;
public void CreateMyOleDbCommand(string myExecuteQuery, string myConnectionString)
{
try
{
OleDbConnection myConnection = new OleDbConnection(myConnectionString);
OleDbCommand myCommand = new OleDbCommand(myExecuteQuery, myConnection);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch(Exception Ex)
{
throw Ex;
}
}

当执行到这句时报错myCommand.ExecuteNonQuery();
告诉我INSERT INTO语句的语法错误!
不知是怎么回事!有哪位高手指教一下!非常感谢!
小弟先谢谢了!!
...全文
221 27 打赏 收藏 举报
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wilson.sea 2003-07-21
  • 打赏
  • 举报
回复
希望各位高手给小第指点迷津!
小弟在线!
huhong81312 2003-07-21
  • 打赏
  • 举报
回复
哈哈怎么谢我啊我费了2个小时才找到这个鸟错误。1般人是想不到的。
huhong81312 2003-07-21
  • 打赏
  • 举报
回复
很急啊?哈哈!找到你的错误了。在你SQL语句。你应该写成:
"Insert into SYSUSER(ID,NAME,DESCR,DEPARTMENT,PWD,RULE,CATEGORY,PHONE,FAX,[MEMO],ISGROUP) Values(1016,'jcy','jcy','jcy','jcy','jcy','jcy','68764','657646','jcy',0)"
看明白了没MEMO是ACCESS数据库的默认关键字你应该把这个字段名改了。不过不改按我的做也对。
cellblue 2003-07-20
  • 打赏
  • 举报
回复
ID这个字段是不是自动编号的,如果是的话,插入的时候就不应该带这个字段
xu0923 2003-07-20
  • 打赏
  • 举报
回复
String SQLStr=SQL上面的SQL语句;
public void CreateMyOleDbCommand(string myExecuteQuery, string myConnectionString)
{
try
{
OleDbConnection myConnection = new OleDbConnection(myConnectionString);
myConnection.Open();
OleDbCommand myCommand = new OleDbCommand(myExecuteQuery, myConnection);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch(Exception Ex)
{
throw Ex;
}
}
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
拜托那位高手在看一看!
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
huhong你说的有点错误,ID只能是大于或等于0的整数,ISGROUP只能是0或是1
没有带小数的可能!况且
"Insert into SYSUSER(ID,NAME,DESCR,DEPARTMENT,PWD,RULE,CATEGORY,PHONE,FAX,MEMO,ISGROUP) Values(1016,'jcy','jcy','jcy','jcy','jcy','jcy','68764','657646','jcy',0)"
这句SQL语句保存到一个String的变量中


——————————

BILLZXH在线等回复
huhong81312 2003-07-20
  • 打赏
  • 举报
回复
应该是SQL语句的问题你在表中定义ID和ISGROUP为数字型如果是带小数的话"Insert into SYSUSER(ID,NAME,DESCR,DEPARTMENT,PWD,RULE,CATEGORY,PHONE,FAX,MEMO,ISGROUP) Values(1016,'jcy','jcy','jcy','jcy','jcy','jcy','68764','657646','jcy',0)"是不会对的,你可以试着把要插入的数字给single变量。然后在插入!不过可能还是不对我不敢肯定你自己试试。
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
看来真的没办法了!
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
返回影响的行数(int型)
我也试过,不过也不行,返回是0,正常返回1的
dplxp 2003-07-20
  • 打赏
  • 举报
回复
好像是要返回值的
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
是的,在ACCESS中运行是没问题!
问题是在C#中运行就出现了问题呀,而且是在提交的时候出错的
————————————————————————————————————
“首先检查类型是不是匹配,如果你认为没问题,同意楼上的写的Select 格式,比如字符型药用'"+xyz+"',其他的"+xyx+",好像不是应该是其他的问题,更别说是C#的BUG......”

楼上说的我试过了,还是不行“'"+xyz+"'”这样的写法有错误,这样xyz会变成变量,而不是要存入的值了
wzs_wzs123 2003-07-20
  • 打赏
  • 举报
回复
我按照你的建了个表,在Access中运行完全没有问题
在Sql Server中运行,有关键字问题
Adamspz 2003-07-20
  • 打赏
  • 举报
回复
用我说的吧,肯定成功
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
我已经贴出了,有人看吗?望各位高手指点指点
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
我的全部代码如下:可以拷贝试一试!谢谢
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Data.SqlClient;
using System.Data.OleDb;

namespace Contest
{
/// <summary>
/// MainForm 的摘要说明。
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private OleDbConnection cnn=pool.getConnection();
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TabControl tabControl1;
private System.Windows.Forms.TabPage Ex1;
private System.Windows.Forms.TabPage Ex3;
private System.Windows.Forms.TextBox vSQL;
private System.Windows.Forms.TextBox vInnerex;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public MainForm()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.Ex1 = new System.Windows.Forms.TabPage();
this.vSQL = new System.Windows.Forms.TextBox();
this.Ex3 = new System.Windows.Forms.TabPage();
this.vInnerex = new System.Windows.Forms.TextBox();
this.tabControl1.SuspendLayout();
this.Ex1.SuspendLayout();
this.Ex3.SuspendLayout();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(152, 256);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(72, 40);
this.button1.TabIndex = 0;
this.button1.Text = "TEST";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// tabControl1
//
this.tabControl1.Controls.AddRange(new System.Windows.Forms.Control[] {
this.Ex1,
this.Ex3});
this.tabControl1.Dock = System.Windows.Forms.DockStyle.Top;
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 0;
this.tabControl1.Size = new System.Drawing.Size(504, 248);
this.tabControl1.TabIndex = 2;
//
// Ex1
//
this.Ex1.Controls.AddRange(new System.Windows.Forms.Control[] {
this.vSQL});
this.Ex1.Location = new System.Drawing.Point(4, 21);
this.Ex1.Name = "Ex1";
this.Ex1.Size = new System.Drawing.Size(496, 223);
this.Ex1.TabIndex = 0;
this.Ex1.Text = "SQL";
//
// vSQL
//
this.vSQL.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.vSQL.Dock = System.Windows.Forms.DockStyle.Fill;
this.vSQL.Multiline = true;
this.vSQL.Name = "vSQL";
this.vSQL.Size = new System.Drawing.Size(496, 223);
this.vSQL.TabIndex = 2;
this.vSQL.Text = "";
//
// Ex3
//
this.Ex3.Controls.AddRange(new System.Windows.Forms.Control[] {
this.vInnerex});
this.Ex3.Location = new System.Drawing.Point(4, 21);
this.Ex3.Name = "Ex3";
this.Ex3.Size = new System.Drawing.Size(496, 223);
this.Ex3.TabIndex = 2;
this.Ex3.Text = "InerExce";
//
// vInnerex
//
this.vInnerex.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.vInnerex.Dock = System.Windows.Forms.DockStyle.Fill;
this.vInnerex.Multiline = true;
this.vInnerex.Name = "vInnerex";
this.vInnerex.Size = new System.Drawing.Size(496, 223);
this.vInnerex.TabIndex = 3;
this.vInnerex.Text = "";
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(504, 301);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.tabControl1,
this.button1});
this.Name = "MainForm";
this.Text = "MainForm";
this.tabControl1.ResumeLayout(false);
this.Ex1.ResumeLayout(false);
this.Ex3.ResumeLayout(false);
this.ResumeLayout(false);

}
#endregion
[STAThread]
static void Main()
{

Application.Run(new MainForm());
}

private void button1_Click(object sender, System.EventArgs e)
{
try
{
String ConStr="Provider = Microsoft.Jet.OLEDB.4.0;Data Source =Jcy.mdb";
String SQLStr="Insert into SYSUSER(ID,NAME,DESCR,DEPARTMENT,PWD,RULE,CATEGORY,PHONE,FAX,MEMO,ISGROUP) Values(1016,'jcy','jcy','jcy','jcy','jcy','jcy','68764','657646','jcy',0)";
this.vSQL.Text=SQLStr;
this.CreateMyOleDbCommand(SQLStr,ConStr);
}
catch
{
}
}

public void CreateMyOleDbCommand(string myExecuteQuery, string myConnectionString)
{
try
{
OleDbConnection myConnection = new OleDbConnection(myConnectionString);
OleDbCommand myCommand = new OleDbCommand(myExecuteQuery, myConnection);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
catch(Exception Ex)
{
// throw Ex;
this.vInnerex.Text=Ex.ToString();
}
}
}
}
运行后点测试,SQL和错误会显示的
数据库可以自己按我第一次发的建立,我的ID是插入的,不是自动增加的!
Adamspz 2003-07-20
  • 打赏
  • 举报
回复
首先检查类型是不是匹配,如果你认为没问题,同意楼上的写的Select 格式,比如字符型药用'"+xyz+"',其他的"+xyx+",好像不是应该是其他的问题,更别说是C#的BUG......
wzs_wzs123 2003-07-20
  • 打赏
  • 举报
回复
我用Access插入数据,没有问题,一定是你的语句有错误,贴出你的全部代码和错误提示在看看
wilson.sea 2003-07-20
  • 打赏
  • 举报
回复
不行呀!我都急死了!!!
老是出错呀!一执行到myCommand.ExecuteNonQuery();就出错!是不是C#有什么BUG呀

那位高手在帮着看看!我在线等!!!
wilson.sea 2003-07-19
  • 打赏
  • 举报
回复
什么是遮掩做的???
你的这段代码我考过来用
SqlDataAdapter adp=new SqlDataAdapter(myExecuteQuery, myConnection);
出错,告诉我myConnection类型不对!
你好象引用了using System.Data.SqlClient;
不用引用这个类能解决吗?
加载更多回复(7)
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2003-07-19 04:26
社区公告

让您成为最强悍的C#开发者