(OleDb) Ошибка ExecuteNonQuery - неверное имя типа - PullRequest
0 голосов
/ 22 февраля 2011

Я довольно новичок в написании кодов 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 ]

1 голос
/ 22 февраля 2011

Похоже, что поставщик OLEDB для движка Jet не поддерживает OleDbType.VarNumeric.

Попробуйте использовать OleDbType.Numeric.

0 голосов
/ 22 февраля 2011

Кроме того, я чую столбец даты ... "2000-01-01"}; Убедитесь, что тип данных столбца таблицы - это тип chara, как вы ожидаете, или столбец даты / времени. Если это так, имейте тип параметра DateTime и убедитесь, что в качестве значения даты / времени задано правильное значение параметра, даже если оно установлено на 12:00:00 утра рассматриваемой даты 2000-01-01.

...