数据访问层DataOP.cs代码
// <summary>
/// 通用的数据库处理类,通过ado.net与数据库连接
/// </summary>
public class DataOP:IDisposable
{
// 连接数据源
private OleDbConnection conn;
/// <summary>
/// 打开数据库连接.
/// </summary>
private void ConOpen() 
{
// 打开数据库连接
try
{
if (conn == null) 
{
conn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=C:\\Inetpub\\wwwroot\\ChengYu\\images\\cydb\\db.mdb ");
}
if (conn.State==System.Data.ConnectionState.Closed) conn.Open();
}
catch(Exception ex)
{
throw new Exception("数据库连接失败" + ex.Message );
} }
/// <summary>
/// 关闭数据库连接
/// </summary>
public void Close() 
{
if (conn != null)
conn.Close();
} /// <summary>
/// 执行一个sql
/// </summary>
/// <param name="mySql"></param>
/// <returns>返回结果集的第一行第一列</returns>
public string ExecSql2TopOne(string mySql)
{
OleDbCommand myCmd=new OleDbCommand(mySql,conn);
myCmd.Connection=conn;
try
{
ConOpen();
Object myResult=myCmd.ExecuteScalar();
if(myResult==null)
return "";
else
return myResult.ToString();
}
catch(Exception ex)
{
return "";
throw new Exception("执行sql语句失败" + ex.Message);
}

}
数据操作层 UsersOP.cs 代码 #region 登陆验证 返回“”验证失败,否则成功
/// <summary>
/// 登陆验证
/// </summary>
/// <param name="userName">用户名</param>
/// <param name="password">密码</param>
/// <returns>返回用户ID</returns>
public string Login(string userName, string password) 
{
string strSql; DataOP data=new DataOP(); strSql="SELECT Users.ID, Users.LoginName, Users.PassWord " + 
" FROM Users " +
" WHERE (LoginName='" + userName + "') AND (PassWord='" + password + "')";
return data.ExecSql2TopOne(strSql);

}
#endregion表示层代码:
DataAccess.UsersOP Users=new DataAccess.UsersOP();
string UsersID=Users.Login(txtName.Text,txtPassWord.Text);当执行到数据访问层 Object myResult=myCmd.ExecuteScalar();时出错,
错误提示:"ExecuteScalar: Connection 属性尚未初始化。" 
麻烦各位大侠帮我找找原因。

解决方案 »

  1.   

    RE jFresH_MaN(十一月的萧邦-夜曲):
    数据库链接成功了。
      

  2.   

    public class DataOP:IDisposable
    {
    // 连接数据源
    private OleDbConnection conn;
    /// <summary>
    /// 打开数据库连接.
    ------------------------------------------------
    那句應該寫成 OleDbConnection conn=new OLeDbConnection();
    讓conn初始化
      

  3.   

    myCmd.Connection=conn;
    try
    {
    ConOpen();
    Object myResult=myCmd.ExecuteScalar();
    if(myResult==null)
    return "";
    else
    return myResult.ToString();
    }
    改成:
    try
    {
    ConOpen();
    myCmd.Connection=conn;
    Object myResult=myCmd.ExecuteScalar();
    if(myResult==null)
    return "";
    else
    return myResult.ToString();
    }
      

  4.   

    OleDbCommand myCmd=new OleDbCommand(mySql,conn);//这里conn还没初始化吧?
    myCmd.Connection=conn;
    try
    {
    ConOpen();//到了这里才初始化吧?
    Object myResult=myCmd.ExecuteScalar();
    if(myResult==null)
    return "";
    else
       return myResult.ToString();
    }
      

  5.   

    myCmd.Connection=conn;
    这句要放在ConOpen()函数执行之后
      

  6.   

    所以你不如这样写
    // 连接数据源
    private OleDbConnection conn=new OleDbConnection("provider=Microsoft.jet.oledb.4.0;data source=C:\\Inetpub\\wwwroot\\ChengYu\\images\\cydb\\db.mdb ");
      

  7.   

    不要回答了,感谢xrascal(横刀夺爱)第一个正确回答了我的问题,
    感谢jFresH_MaN(十一月的萧邦-夜曲)。
    感谢所有热心的大侠门