代码如下:       private void DeleteBtn_Click(object sender, EventArgs e)
        {
            //int result = DALClass.DeleteManager(this.managerNameTxt.Text);
            //if (result > -1)
            //{
            //    parent.TaxstatusBar.Panels[0].Text = "删除成功";
            //}
            //else
            //{
            //    parent.TaxstatusBar.Panels[0].Text = "删除失败";
            //}            int ret =-1;
            string dbProviderName = ConfigurationSettings.AppSettings["DbProviderName"];
            //private static string dbp = "Provider=System.Data.OleDb";
            string dbConnectionString = ConfigurationManager.AppSettings["TaxInvoiceConn"];            DbProviderFactory dbfactory = DbProviderFactories.GetFactory(dbProviderName);
            DbConnection dbconn = dbfactory.CreateConnection();
            dbconn.ConnectionString = dbConnectionString;            DbCommand dbCommand = dbconn.CreateCommand();
            dbCommand.CommandText = "Delete From TaxManagers Where MangerNumbuer=@TaxManagerNum";
            dbCommand.CommandType = CommandType.Text;            DbParameter dbParameter = dbCommand.CreateParameter();
            dbParameter.DbType = DbType.String;
            dbParameter.ParameterName = "@TaxManagerNum";
            dbParameter.Value = this.managerNumTxt.Text;
            dbParameter.Direction = ParameterDirection.Input;
            dbCommand.Parameters.Add(dbParameter);            dbCommand.Connection.Open();
            ret = dbCommand.ExecuteNonQuery();
            dbCommand.Connection.Close();            if (ret > -1)
            {
                MessageBox.Show("删除成功");
            }
        }App.conifg文件内容如下:我用的是Access数据库,驱动是<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="TaxConnectionString"
            connectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Tax.accdb;Persist Security Info=True"
            providerName="System.Data.OleDb" />
      <add name="TaxInvoiceConn" connectionString="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\TaxInvionce\TaxInvionce\Tax.mdb"
           providerName="System.Data.OleDb" />
    </connectionStrings>
    
    <appSettings>
        <add key="UseDepartment" value=""/>
        <add key="DepartmentNum" value=""/>
        <add key="DbProviderName" value="System.Data.OleDb"/>
        <add key="TaxInvoiceConn" value="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Tax.accdb;Persist Security Info=True"/>
    </appSettings>
</configuration>执行到ret = dbCommand.ExecuteNonQuery();时出现如下错误信息:
至少有一个参数未指定

解决方案 »

  1.   

    提示那个错误是因为dbParameter.Value = this.managerNumTxt.Text,可能没有给@TaxManagerNum成功赋值吧,个人估计!!
      

  2.   

    Access数据库中Delete From TaxManagers Where MangerNumbuer=@TaxManagerNum这样用是不对的,参数只能用问号Delete From TaxManagers Where MangerNumbuer=?你自己google一下access里面参数的用法
      

  3.   

    看看你的SQL是否正确。。
    最好单步调试
      

  4.   

    Delete From TaxManagers Where MangerNumbuer=?
    access数据库中参数占位符是"?",参数名称好像可以随意
      

  5.   

    问题出在SQL语句上。你打印一下语句看下。
      

  6.   


    string sql="Delete From NewsLink where ID=?"
    OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\DataBase\Temp.mdb");
    OleDbCommand cmd = new OleDbCommand(sql,conn); 
    OleDbParameter parm = new OleDbParameter("id",OleDbType.Int);
    parm.Direction = ParameterDirection.Input;
    cmd.Parameters.Add(parm);
    cmd.Parameters["id"].Value = 5;
    conn.Open();
    cmd.ExecuteReader();
    conn.Close();
    试过,没有问题
      

  7.   

    多谢楼上的朋友,可我用的是DbXXXX的工厂模式....
      

  8.   

    字段名没有错,有兴趣的朋友可以试一下ADO.NET下工厂模式的写法。
      

  9.   

    int ret =-1;
    为什么起名字为ret...我还以为是要返回出此函数的值
      

  10.   

    Access和sql server参数语法有点不同
    用?代替参数名。
      

  11.   

    ConnectionString 写错了吧 少了个DSn=xx