我现在有一个项目,需要用到access数据库,
程序中执行insert 语句成功后,打开对应的access数据表查看,发现没有插入数据.
但同样的insert语句在access的sql视图运行后,发现数据可以插入到表中。
所以,我想问问大家,为什么在程序中运行OK,没有报异常,调试中发现影响的行数为1,但实际上没有插入数据。
这种情况到底是什么原因??
9 个解决方案
#1
还是贴出来代码吧~
#2
就是通过调用ExecuteCommand(string sql, params OleDbParameter[] values)
public static int AddCszm(CszmInfo cszm)
{
int y=0;
string sql = "insert into cszm(inputDate,childName,sex,birthDate,birthAddress,birthWeek,healthInfo,weight,height,motherName,"+
"motherAge,motherNationality,motherNation,motherID,fatherName,fatherAge,fatherNationality,fatherNation,fatherID,"+
"birthAddrType,deliveryAgencies,homeAddress,issueDate) "+
"values('"+cszm.InputDate+"','"+cszm.ChildName+"','"+cszm.Sex+"','"+cszm.BirthDate+"','"+cszm.BirthAddress+
"',"+cszm.BirthWeek+",'"+cszm.HealthInfo+"',"+cszm.Weight+","+cszm.Height+",'"+cszm.MotherName+
"',"+cszm.MotherAge+",'"+cszm.MotherNationality+"','"+cszm.MotherNation+"','"+cszm.MotherID+
"','"+cszm.FatherName+"',"+cszm.FatherAge+",'"+cszm.FatherNationality+"','"+cszm.FatherNation+
"','" + cszm.FatherID + "','" + cszm.BirthAddrType + "','" + cszm.DeliveryAgencies +
"','"+cszm.HomeAddress+"','"+cszm.IssueDate+"')";
y = DBHelper.ExecuteCommand(sql,null);
return y;
}
public static int ExecuteCommand(string sql, params OleDbParameter[] values)
{
using (OleDbConnection conn = new OleDbConnection(ConnecttionString))
{
OleDbCommand cmd = new OleDbCommand();
PrepareCommand(cmd, conn, sql, values);
return cmd.ExecuteNonQuery();
}
}
#3
这个问题应该是调试的问题。
每次重新DEBUG的时候,会把数据库清空。
直接去运行那个EXE文件再试一下。
每次重新DEBUG的时候,会把数据库清空。
直接去运行那个EXE文件再试一下。
#4
你的项目中有数据库文件吗?
#5
是不是你看错文件了?
#6
另外:上面的prepareCommand方法定义如下:
private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, string cmdText, OleDbParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
if (cmdParms != null)
{
foreach (OleDbParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
#7
ACCESS支持带参数的cmd么?楼主可以考虑把sql拼完之后去执行,而不是以传参数的格式
#8
3楼正解,原来程序一直都没有问题,只是自己都在调试状态看结果,所以误导了自己!
#9
如果返回值显示影响行数是1的话,那说明程序没问题
如果你是把数据库文件添加到项目的话
在视图中显示的是临时数据库信息,每次运行完会清空,你可以调试的时候对比一下。
debug目录下的mdb和项目目录中的原mdb,就知道区别了,每次调试,临时数据库都会重新拷贝原数据库文件
如果你是把数据库文件添加到项目的话
在视图中显示的是临时数据库信息,每次运行完会清空,你可以调试的时候对比一下。
debug目录下的mdb和项目目录中的原mdb,就知道区别了,每次调试,临时数据库都会重新拷贝原数据库文件
#1
还是贴出来代码吧~
#2
就是通过调用ExecuteCommand(string sql, params OleDbParameter[] values)
public static int AddCszm(CszmInfo cszm)
{
int y=0;
string sql = "insert into cszm(inputDate,childName,sex,birthDate,birthAddress,birthWeek,healthInfo,weight,height,motherName,"+
"motherAge,motherNationality,motherNation,motherID,fatherName,fatherAge,fatherNationality,fatherNation,fatherID,"+
"birthAddrType,deliveryAgencies,homeAddress,issueDate) "+
"values('"+cszm.InputDate+"','"+cszm.ChildName+"','"+cszm.Sex+"','"+cszm.BirthDate+"','"+cszm.BirthAddress+
"',"+cszm.BirthWeek+",'"+cszm.HealthInfo+"',"+cszm.Weight+","+cszm.Height+",'"+cszm.MotherName+
"',"+cszm.MotherAge+",'"+cszm.MotherNationality+"','"+cszm.MotherNation+"','"+cszm.MotherID+
"','"+cszm.FatherName+"',"+cszm.FatherAge+",'"+cszm.FatherNationality+"','"+cszm.FatherNation+
"','" + cszm.FatherID + "','" + cszm.BirthAddrType + "','" + cszm.DeliveryAgencies +
"','"+cszm.HomeAddress+"','"+cszm.IssueDate+"')";
y = DBHelper.ExecuteCommand(sql,null);
return y;
}
public static int ExecuteCommand(string sql, params OleDbParameter[] values)
{
using (OleDbConnection conn = new OleDbConnection(ConnecttionString))
{
OleDbCommand cmd = new OleDbCommand();
PrepareCommand(cmd, conn, sql, values);
return cmd.ExecuteNonQuery();
}
}
#3
这个问题应该是调试的问题。
每次重新DEBUG的时候,会把数据库清空。
直接去运行那个EXE文件再试一下。
每次重新DEBUG的时候,会把数据库清空。
直接去运行那个EXE文件再试一下。
#4
你的项目中有数据库文件吗?
#5
是不是你看错文件了?
#6
另外:上面的prepareCommand方法定义如下:
private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, string cmdText, OleDbParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
cmd.CommandType = CommandType.Text;
if (cmdParms != null)
{
foreach (OleDbParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
#7
ACCESS支持带参数的cmd么?楼主可以考虑把sql拼完之后去执行,而不是以传参数的格式
#8
3楼正解,原来程序一直都没有问题,只是自己都在调试状态看结果,所以误导了自己!
#9
如果返回值显示影响行数是1的话,那说明程序没问题
如果你是把数据库文件添加到项目的话
在视图中显示的是临时数据库信息,每次运行完会清空,你可以调试的时候对比一下。
debug目录下的mdb和项目目录中的原mdb,就知道区别了,每次调试,临时数据库都会重新拷贝原数据库文件
如果你是把数据库文件添加到项目的话
在视图中显示的是临时数据库信息,每次运行完会清空,你可以调试的时候对比一下。
debug目录下的mdb和项目目录中的原mdb,就知道区别了,每次调试,临时数据库都会重新拷贝原数据库文件