public static readonly string ConnString = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = Data\storage.mdb"
public static readonly string ChangePassword = "update users set userPassword=@userNewPassword where userName=@userName"OleDbConnection conn = new OleDbConnection(ConnString);
OleDbCommand cmd = new OleDbCommand(Constants.ChangePassword,conn);
OleDbParameter paramUserName = new OleDbParameter("@userName", userName);
cmd.Parameters.Add(paramUserName);
OleDbParameter paramUserNewPassword = new OleDbParameter("@userNewPassword", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
catch (OleDbException ex)
{
return false;
}请问 cmd.ExecuteNonQuery(),参数正确,怎么在数据库中无法更新,请各位大哥多多指教?小弟刚学c#不久
public static readonly string ChangePassword = "update users set userPassword=@userNewPassword where userName=@userName"OleDbConnection conn = new OleDbConnection(ConnString);
OleDbCommand cmd = new OleDbCommand(Constants.ChangePassword,conn);
OleDbParameter paramUserName = new OleDbParameter("@userName", userName);
cmd.Parameters.Add(paramUserName);
OleDbParameter paramUserNewPassword = new OleDbParameter("@userNewPassword", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
catch (OleDbException ex)
{
return false;
}请问 cmd.ExecuteNonQuery(),参数正确,怎么在数据库中无法更新,请各位大哥多多指教?小弟刚学c#不久
ex 没有报错,cmd.ExecuteNonQuery()返回的结果不关怎么样总是0,就是在数据库中无法更新,而sql语句在数据库中运行是没有错误的啊~
public bool ChangePassword(string userName, string userOldPassword, string userNewPassword)
{
if (!Login(userName, userOldPassword))
{
return false;
}
else
{
OleDbConnection conn = new OleDbConnection(Constants.ConnString);
OleDbCommand cmd = new OleDbCommand(Constants.ChangePassword, conn);
OleDbParameter paramUserName = new OleDbParameter("@userName", userName);
cmd.Parameters.Add(paramUserName);
OleDbParameter paramUserNewPassword = new OleDbParameter("@userNewPassword", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true; }
catch (OleDbException ex)
{
return false;
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
}
}调用:bool result = userDB.ChangePassword(GlobalInfo.UserName.Trim(), this.txtOldPassword.Text.Trim(), this.txtNewPassword.Text.Trim());请各位指点指点啦!谢谢!
格式
代码上没看出什么问题
应该是你设计上的问题吧
另外,用Access数据库的mdb文件要放在debug目录下,在项目目录下没行的,请检查一下
我将数据库文件放到了项目文件夹了,连接没有问题,程序中能查询操作,但就是不能更新和插入,不知道问题出在哪?而sql语句在acess查询中没有问题,无奈!
请各位大哥继续指点迷津啊!
我将数据库文件放到了项目文件夹了,连接没有问题,程序中能查询操作,但就是不能更新和插入,不知道问题出在哪?而sql语句在acess查询中没有问题,无奈!
请各位大哥继续指点迷津啊!
===================================
我说的是要放在debug目录下,放在项目目录下是不行的,但你说能查询,可能不是这个问题,不过还是copy一个mdb文件到debug中试试
另外你可以中断一下
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;
一句一句看是不是有没执行的
然后再试试用sql语句看看
改成
public static readonly string ChangePassword = "update users set userPassword='@userNewPassword' where userName='@userName'";
试试
按你们的方法做了,可能不是这方面的问题,还不行啊
进一步探索中......
public static readonly string ChangePassword = "update users set userPassword=? where userName=?"OleDbConnection conn = new OleDbConnection(ConnString);
OleDbCommand cmd = new OleDbCommand(Constants.ChangePassword,conn);
OleDbParameter paramUserNewPassword = new OleDbParameter("@userNewPassword", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
OleDbParameter paramUserName = new OleDbParameter("@userName", userName);
cmd.Parameters.Add(paramUserName);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;}
catch (OleDbException ex)
{
return false;
}Access不支持具名参数,注意Parameters集合中参数的顺序
public static readonly string userLoginString = "select count(*) from users where userName = @userName and userPassword = @userPassword ";cmd.ExecuteNonQuery(); 能进行查询,说明acess能用具名参数
对于参数顺序,我试了一下,还是没有解决啊!
1 检查数据库文件,是否为只读,若NTFS检查是否有权限问题
2 检查数据库结构,是否存在外键或主键约束问题。可将该语句直接放入Access的查询中执行看是否正确。
3 逐行调试程序语句,看执行cmd.ExecuteNonQuery()后有没有Exception内容其他应该没有什么问题了。补充一下,楼主的代码写得很乱
都试了,还是不行啊!郁闷!看来我得换成sql server数据库啦
ExecuteNonQuery()函数是不行的该函数返回影响的行数
/// 新建用户资料
/// </summary>
/// <param name="sacc"></param>
/// <param name="spw"></param>
/// <param name="snanme"></param>
/// <param name="slv"></param>
/// <returns></returns>
public bool saveUser(string sacc, string spw, string snanme, string slv,string dTime)
{
string sql = "";
sql = "insert into [Admin]" + "(user_name,user_acc,user_pw,user_lv,user_date)" +
" values('" +
sacc + "','" +
spw + "','" +
snanme + "','" +
slv + "',#" +
dTime + "#)"; try
{
this.ExecuteSql(sql);
}
catch (Exception e)
{
MessageBox.Show(e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
} return true;
} /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString"></param>
/// <returns></returns>
public int ExecuteSql(string SQLString)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.OleDb.OleDbException E)
{
throw new Exception(E.Message);
}
}
}
}--------------->
调用:saveUser(TextBox1.text,TextBox2.text,TextBox3.text,TextBox4.text,TextBox5.text);
public static readonly string ConnString = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = Data\storage.mdb"
public static readonly string ChangePassword = "update users set userPassword=@userNewPassword where userName=@userName"OleDbConnection conn = new OleDbConnection(ConnString);
OleDbCommand cmd = new OleDbCommand(Constants.ChangePassword,conn);
OleDbParameter paramUserNewPassword = new OleDbParameter("@userNewPassword", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
OleDbParameter paramUserName = new OleDbParameter("@userName", userName);
cmd.Parameters.Add(paramUserName);
try
{
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
return true;
}
catch (OleDbException ex)
{
return false;
}
public static string ConnString = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = data\storage.mdb";
public static string ChangePassword = "update users set userPassword='@userNewPassword' where userName='@userName'";
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(ConnString);
OleDbCommand cmd = new OleDbCommand(ChangePassword, conn);OleDbParameter paramUserNewPassword = new OleDbParameter("@userNewPassword", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
OleDbParameter paramUserName = new OleDbParameter("@userName", userName);
cmd.Parameters.Add(paramUserName);
try
{
conn.Open();
MessageBox.Show(cmd.ExecuteNonQuery().ToString());
conn.Close();
}
catch (OleDbException ex)
{
MessageBox.Show(ex.ToString());
}
虽然你已经接帖了,我还是说一下这个问题.
public static string ConnString = @"Provider = Microsoft.Jet.OLEDB.4.0;Data Source = data\storage.mdb";
public static string ChangePassword = "update users set userPassword=? where userName=?";
private void button1_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(ConnString);
OleDbCommand cmd = new OleDbCommand(ChangePassword, conn);
//下面参数中"?"改成"@userNewPassword"也不行..
OleDbParameter paramUserNewPassword = new OleDbParameter("?", userNewPassword);
cmd.Parameters.Add(paramUserNewPassword);
OleDbParameter paramUserName = new OleDbParameter("?", userName);
cmd.Parameters.Add(paramUserName);
你在Command里的参数不要用"?",把OleDbParameter paramUserNewPassword = new OleDbParameter("?", userNewPassword);改成OleDbParameter paramUserNewPassword = new OleDbParameter("@userPassword", userNewPassword); SQL语句,就按照你现在的,写成:update users set userPassword=? where userName=?
同时,你还有一个重要的错误,你的OleDbCommand的CommandType属性没有设置成StoredProcedure,你要在执行Execute方法前,加这样一句:
cmd.CommandType = CommandType.StoredProcedure;