最近需要做个项目,把一个库存管理系统原有的SQL数据库变为ACCESS数据库。改了很多SQL变OLEDB,还是出现无法解决错误。代码如下:
#region 用户登录
/// <summary>
/// 用户登录
/// </summary>
/// <param name="P_str_UserName">用户名</param>
/// <param name="P_str_UserPwd">用户密码</param>
/// <returns>返回一个int类型的值</returns>
public int UserLogin(string P_str_UserName, string P_str_UserPwd)
{
OleDbConnection Oledbcon = datacon.getcon();
OleDbCommand aCommand = new OleDbCommand("proc_Login", Oledbcon);
aCommand.CommandType = CommandType.StoredProcedure;
aCommand.Parameters.Add("@UserName", OleDbType.VarChar, 20).Value = P_str_UserName;
aCommand.Parameters.Add("@UserPwd", OleDbType.VarChar, 20).Value = P_str_UserPwd;
OleDbParameter returnValue = aCommand.Parameters.Add("returnValue", OleDbType.Integer, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
Oledbcon.Open();
try
{
aCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
aCommand.Dispose();
Oledbcon.Close();
Oledbcon.Dispose();
}
int P_int_returnValue = (int)returnValue.Value;
return P_int_returnValue; }
#endregion红色两行代码提示报错。根据错误提示找到在frmLogin模块,红色部分。
private void btnLogin_Click(object sender, EventArgs e)
{
int P_int_returnValue = doperate.UserLogin(cboxUName.Text.Trim(), txtPwd.Text.Trim()); if (P_int_returnValue == 100)
{
M_str_name = cboxUName.Text;
M_str_pwd = txtPwd.Text.Trim();
frmMain fmain = new frmMain();
this.Hide();
fmain.Show();
}
if (P_int_returnValue == -100) {
MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtPwd.Text = "";
cboxUName.Focus();
}
}报出错误为int P_int_returnValue = (int)returnValue.Value;未将对象引用设置到对象的实例。求解数据库编程语言C#
#region 用户登录
/// <summary>
/// 用户登录
/// </summary>
/// <param name="P_str_UserName">用户名</param>
/// <param name="P_str_UserPwd">用户密码</param>
/// <returns>返回一个int类型的值</returns>
public int UserLogin(string P_str_UserName, string P_str_UserPwd)
{
OleDbConnection Oledbcon = datacon.getcon();
OleDbCommand aCommand = new OleDbCommand("proc_Login", Oledbcon);
aCommand.CommandType = CommandType.StoredProcedure;
aCommand.Parameters.Add("@UserName", OleDbType.VarChar, 20).Value = P_str_UserName;
aCommand.Parameters.Add("@UserPwd", OleDbType.VarChar, 20).Value = P_str_UserPwd;
OleDbParameter returnValue = aCommand.Parameters.Add("returnValue", OleDbType.Integer, 4);
returnValue.Direction = ParameterDirection.ReturnValue;
Oledbcon.Open();
try
{
aCommand.ExecuteScalar();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
aCommand.Dispose();
Oledbcon.Close();
Oledbcon.Dispose();
}
int P_int_returnValue = (int)returnValue.Value;
return P_int_returnValue; }
#endregion红色两行代码提示报错。根据错误提示找到在frmLogin模块,红色部分。
private void btnLogin_Click(object sender, EventArgs e)
{
int P_int_returnValue = doperate.UserLogin(cboxUName.Text.Trim(), txtPwd.Text.Trim()); if (P_int_returnValue == 100)
{
M_str_name = cboxUName.Text;
M_str_pwd = txtPwd.Text.Trim();
frmMain fmain = new frmMain();
this.Hide();
fmain.Show();
}
if (P_int_returnValue == -100) {
MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtPwd.Text = "";
cboxUName.Focus();
}
}报出错误为int P_int_returnValue = (int)returnValue.Value;未将对象引用设置到对象的实例。求解数据库编程语言C#
解决方案 »
- c# wpf中 熟悉(Lambda表达式)的请进,谢谢
- 100分,问QQ通信原理
- 求教:画快捷键下面的那根横线,谢谢
- C# 导出数据到EXCEL并作图
- 枚举双色球的号码
- WinForm下实现不规则窗体,设定Region的问题
- Win32_NetworkAdapterConfiguration 所属的api从哪里下载?
- 有人使用过Dotfuscator Community Edition 吗!!
- axWebBrowser 打开视频网站 无法观看
- 在webform中,关于DataGrid每行的mouseover的效果怎么做?
- 调用java webservice的错误!
- C#窗体程序怎样将sql语句统计出来的值显示到textbox。
把它贴出来
{
public static string M_str_name;//记录登录用户名字
public static string M_str_pwd;//记录登录用户密码
public static string M_str_right;//记录登录用户的权限
BaseClass.DataCon datacon = new SMS.BaseClass.DataCon();
BaseClass.DataOperate doperate = new SMS.BaseClass.DataOperate();
public frmLogin()
{
InitializeComponent();
}
private void frmLogin_Load(object sender, EventArgs e)
{
doperate.cboxBind("select UserName from tb_User", "tb_User", "UserName", cboxUName);
} private void btnLogin_Click(object sender, EventArgs e)
{
int P_int_returnValue = doperate.UserLogin(cboxUName.Text.Trim(), txtPwd.Text.Trim());
if (P_int_returnValue == 100)
{
M_str_name = cboxUName.Text;
M_str_pwd = txtPwd.Text.Trim();
frmMain fmain = new frmMain();
this.Hide();
fmain.Show();
}
if (P_int_returnValue == -100)
{
MessageBox.Show("用户名或密码错误!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtPwd.Text = "";
cboxUName.Focus();
}
}
这个我也修改了哎。不过不知道修改的对不对。修改完之后是提示错误。我看到有个帖子是说:
由于access不需要返回值。因此CreateCommand函数里面不需要如下部分:[csharp] view plaincopyprint?
01.cmd.Parameters.Add(
02. new SqlParameter("ReturnValue", SqlDbType.Int, 4,
03. ParameterDirection.ReturnValue, false, 0, 0,
04. string.Empty, DataRowVersion.Default, null));
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null)); 如果不把该部分去掉,依然照搬操作SQL的代码。将出现报错“异常详细信息: System.InvalidOperationException: System.Data.OleDb.OleDbDataAdapter 内部错误: 无效的参数访问器: 2 BADBINDINFO。” 如果碰到类似错误,不妨按照上述的把返回值注释掉。
所以我就不知道修改什么了。。
因为我用到的access访问系统表操作比较简单。所以想换一下直接添加access数据库访问层不需要修改原来的SQL语句么??
我这里没有insert吧额现在就是用户登陆进去就提示System.Data.OleDb.OleDbDataAdapter 内部错误: 无效的参数访问器: 2 BADBINDINFO。” 然后错误就被定位到int P_int_returnValue = (int)returnValue.Value;未将对象引用设置到对象的实例。这个是需要改动些什么么??
这个错误是说你那个reurnValue.Value 是空的。。跟踪下看看怎么来的
我查过了,SQL语句没有问题。继续求助。。