(OleDb)ExecuteNonQuery错误 - 类型名称无效

时间:2011-02-22 11:42:51

标签: c# asp.net oledb executenonquery

我在编写asp.net代码时非常新,我无法解决问题。每次我尝试注册时都会收到以下错误:

Type name is invalid.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.OleDb.OleDbException: Type name is invalid.

Source Error:

Line 60:             }
Line 61: 
Line 62:             cmnd.ExecuteNonQuery();
Line 63:             this.cnct.Close();
Line 64:         }

源代码是:

    public class Connection
    {
        private OleDbConnection cnct;

        public Connection(string dbPath)
        {
            this.cnct = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + dbPath);
        }

        /// <param name="types">'c' - VarChar, 'C' - Char, 'n' - VarNumeric, 'b' - Boolean</param>
        public void Insert(string tableName, string[] inputs, char[] types)
        {
            string sql = "INSERT INTO " + tableName + " VALUES (";
            for (int i = 0; i < inputs.Length - 1; i++)
                sql += "@p" + i + ",";
            sql += "@p" + (inputs.Length - 1) + ")";

            this.cnct.Open();
            OleDbCommand cmnd = new OleDbCommand(sql, this.cnct);

            for (int i = 0; i < inputs.Length; i++)
            {
                if (types[i] == 'c')
                {
                    cmnd.Parameters.Add("@p" + i, OleDbType.VarChar);
                    cmnd.Parameters["@p" + i].Value = inputs[i];
                }
                else if (types[i] == 'C')
                {
                    cmnd.Parameters.Add("@p" + i, OleDbType.Char);
                    cmnd.Parameters["@p" + i].Value = inputs[i];
                }
                else if (types[i] == 'n')
                {
                    cmnd.Parameters.Add("@p" + i, OleDbType.VarNumeric);
                    cmnd.Parameters["@p" + i].Value = double.Parse(inputs[i]);
                }
                else if (types[i] == 'b')
                {
                    cmnd.Parameters.Add("@p" + i, OleDbType.Boolean);
                    cmnd.Parameters["@p" + i].Value = bool.Parse(inputs[i]);
                }
            }

            cmnd.ExecuteNonQuery();
            this.cnct.Close();
        }
    }

并使用

调用Insert方法
Connection cnct = new Connection(Server.MapPath("App_Data/WMUdb.mdb"));
cnct.Insert("members", values, new char[7] { 'c', 'c', 'c', 'c', 'C', 'n', 'b' });

(其中

values = new string[7] {"userName","my name","pswrd123","email@example.com","2000-01-01"};

)。

我该怎么做才能解决它?

非常感谢。

2 个答案:

答案 0 :(得分:1)

看起来Jet引擎的OLEDB提供程序不支持OleDbType.VarNumeric

请尝试使用OleDbType.Numeric

答案 1 :(得分:0)

另外,我闻到了一个日期栏......“2000-01-01”};确保表列数据类型是您期望的chara,或者它确实是日期/时间列。如果是这样,请使用参数类型DateTime并确保将参数值正确设置为日期/时间值,即使它设置为相关的2000-01-01日期的上午12:00:00。