string strSql = "select * from [Category] where id=?";
没这样写过
表名 不用加中括号我记得
?也没用过

解决方案 »

  1.   

    using System;
    using System.Xml;
    using System.Data.OleDb;
    using System.Data;namespace ACS
    {
    /// <summary>
    /// 對數據庫進行更新
    /// </summary>
    /// AIDU數據庫連接
    /// Retrieval 返回查詢Dataset
    /// Translation與數據庫進行交易[Access = true][fail = false]
    /// 

    public class AIDU
    {

    #region 連接失敗返回失敗消息--[Link Ok return null][Link fail return ErrorMessage]
    public string ErrorMsg()
    {
    return sErrorMsg;
    } #endregion #region 設置公共連接對像字串--[ sAcsCon ]
    public string sAcsConString()
    {
    string sConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = c:\\test.mdb";
    return sConString;
    }


    public string sAcsCon
    {
    get{return sAcsConString();}
    }

    #endregion #region 設置公共連接對像--[ Link_cn ] public OleDbConnection Link_cn 
    {
    get{return Acs_cn();}
    } public OleDbConnection Acs_cn()
    {
    OleDbConnection cn = new OleDbConnection(sAcsCon);
    if(cn.State == ConnectionState.Closed)
    {
    cn.Open();
    }
    return cn;
    } #endregion //連接失敗後的返回消息
    private string sErrorMsg ="" ;
    //連接標志變量 [bFlag = true Connection Database Success]
    //[bFlag = false Connection Database unSuccess]
    private bool bFlag = false;

    #region 數據庫連接--[ LINK-TEST ] public bool AIDU_Link()
    {
    OleDbConnection TestCn = new OleDbConnection(sAcsCon);
    //測試數據庫連接
    try
    {
    if(TestCn.State != ConnectionState.Open)
    {
    TestCn.Open();
    bFlag = true;
                    }
    }
    catch(Exception e)

    sErrorMsg = e.Message;
    }
    finally
    {
    if(TestCn.State == ConnectionState.Open)
    {
    TestCn.Close();
    }
    }
    return bFlag;
    } #endregion #region 資料查詢--[ SELECT ]
    public DataSet Select(string sCmdString)
    {
    //建立CONNECTION對像
    OleDbConnection cn1=new OleDbConnection(sAcsCon);
    //建立DATASET對像,做資料返回值
    DataSet oDs = new DataSet();
    try
    {//建立Adapter對像
    OleDbDataAdapter myAdapter = new OleDbDataAdapter(sCmdString,cn1);
    myAdapter.Fill(oDs);
    }
    catch
    {
    cn1.Close();
    }
                
    return oDs;
    }
    #endregion #region 數據資料更新--[ Update ] //執行--[ UPDATE ][ INSERT ][ DELETE ] 
    //[ The command Execute sccess return 1]
    //[ The command Execute unSuccess return -1]
    public int UpdateCmd(string CommandString)
    {
    //進行一個本地交易
    OleDbTransaction myTran = Link_cn.BeginTransaction();
    myTran.Begin();
    //oledbcommand 命令執行交易
    OleDbCommand myCmd = new OleDbCommand(CommandString,Link_cn);
    //和數據庫進這行數據交易
    try
    {
    //提交數據
    myCmd.ExecuteNonQuery();
    myTran.Commit();
    return 1;
    }
    catch(Exception te)
    {
    throw  te;
    //出錯數據回滾原來的狀態,保持數據庫一致性
    myTran.Rollback();
    return -1;
    }
    finally
    {
    //執行交易後關閉聯接
    if(Link_cn.State==ConnectionState.Open)
    {
    Link_cn.Close();
    }
    }
    }
    #endregion
    }
    }
      

  2.   

    myCmd.Parameters.Add("id",i);
    中没有指定字段,应该这样把
    myCmd.Parameters.Add("@id",类型,长度,字段);
      

  3.   

    myCmd.Parameters.Add("id",i);
    中没有指定字段,应该这样把
    myCmd.Parameters.Add("@id",类型,长度,字段);
    mycmd.parameters[0].value=i
      

  4.   

    myCmd.Parameters.Add("id",i);
    中没有指定字段,应该这样把
    myCmd.Parameters.Add("@id",类型,长度,字段);
    mycmd.parameters[0].value=i
    这样的我昨天也写过,但是还是发生同样的异常。那个繁体字的,你写的什么啊???
    谢谢楼上的回答
      

  5.   

    现在修改成这样,还是不行啊,老大们指点下using System;
    using System.Data;
    using System.Data.OleDb;public class TestClass
    {
    public static int Main()
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\web\\zjisp\\web\\zjisp.mdb";
    string strSql = "select * from [Category] where id=?"; OleDbConnection myConn = new OleDbConnection(strConn);
    OleDbCommand myCmd = new OleDbCommand(strSql,myConn);

    for(int i = 0; i <=5; i++)
    {
    try
    {
    OleDbParameter parm = new OleDbParameter("id",OleDbType.Integer,5);
    parm.Direction = ParameterDirection.Input; myCmd.Parameters.Add(parm);
    myCmd.Parameters["id"].Value = i; myConn.Open(); Console.WriteLine(myCmd.CommandText);
    OleDbDataReader myReader = myCmd.ExecuteReader(); while(myReader.Read())
    {
    Console.WriteLine("{0}\t{1}",myReader[0].ToString(),myReader[1].ToString());
    } myReader.Close();
    myConn.Close();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.ToString());
    Console.ReadLine();
    return 0;
    }
    }

    Console.ReadLine();
    return 1;
    }
    }
      

  6.   

    你改成这样:(我也不知行不行)
    string strSql = "select * from [Category] where id=@p";OleDbParameter parm = new OleDbParameter("@id",OleDbType.Integer,5,"id");
      

  7.   

    应该不行
    access是要使用问号作为占位符的~!
    我试试先。
    thx
      

  8.   

    你能不能把你的数据库和该段的代码发给我呀,[email protected]
      

  9.   

    你字段写错了id 应写成CategoryID,应该这样:
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\\zjisp.mdb";
    string strSql = "select * from [Category] where CategoryID=@p"; OleDbConnection myConn = new OleDbConnection(strConn);
    OleDbCommand myCmd = new OleDbCommand(strSql,myConn);

    for(int i = 0; i <=8; i++)
    {
    try
    {
    OleDbParameter parm = new OleDbParameter("@id",OleDbType.Integer,5,"CategoryID");
    parm.Direction = ParameterDirection.Input; myCmd.Parameters.Add(parm);
    myCmd.Parameters["@id"].Value = i; myConn.Open(); Console.WriteLine(myCmd.CommandText);
    OleDbDataReader myReader = myCmd.ExecuteReader(); while(myReader.Read())
    {
    Console.WriteLine("{0}\t{1}",myReader[0].ToString(),myReader[1].ToString());
    } myReader.Close();
    myConn.Close();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.ToString());
    Console.ReadLine();
    return 0;
    }
    }

    Console.ReadLine();
    return 1;
    }
      

  10.   

    好了,谢谢楼上的~
    我发代码你的时候,是修改过数据库路径的,所以不是数据库的问题。
    是应该这样写:string strSql = "select * from [Category] where CategoryID=?";
    别的地方都不用改,是我记错了数据库里面的字段名字,不好意思。
    当然,你那样也是对的。我的已经弄好了,谢谢~!接分。
    using System;
    using System.Data;
    using System.Data.OleDb;public class TestClass
    {
    public static int Main()
    {
    string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\web\\zjisp\\web\\zjisp.mdb";
    string strSql = "select * from [Category] where CategoryID=?"; OleDbConnection myConn = new OleDbConnection(strConn);
    OleDbCommand myCmd = new OleDbCommand(strSql,myConn);

    for(int i = 0; i <=8; i++)
    {
    try
    {
    OleDbParameter parm = new OleDbParameter("ID",OleDbType.Integer,5);
    parm.Direction = ParameterDirection.Input; myCmd.Parameters.Add(parm);
    myCmd.Parameters["ID"].Value = i; myConn.Open(); OleDbDataReader myReader = myCmd.ExecuteReader(); while(myReader.Read())
    {
    Console.WriteLine("{0}\t{1}",myReader[0].ToString(),myReader[1].ToString());
    } myReader.Close();
    myConn.Close();
    }
    catch(Exception e)
    {
    Console.WriteLine(e.ToString());
    Console.ReadLine();
    return 0;
    }
    }

    Console.ReadLine();
    return 1;
    }
    }