Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Worldmen
3 / 3 / 3
Регистрация: 31.08.2013
Сообщений: 231
Завершенные тесты: 1
1

Ругается на SqlDbType.VarChar

12.10.2014, 23:10. Просмотров 844. Ответов 5
Метки нет (Все метки)

Работаю с локальной БД (VS 2010, FW 4). Ниже приведенный код работает, но если раскоментировать строки
param1.SqlDbType = SqlDbType.VarChar;
то начнет на них ругаться: "ArgumentException не обработано ". Почему?
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        private void button3_Click(object sender, EventArgs e)
        {
            // добавить данные в БД
            string f = textBox1.Text;
            string s = textBox2.Text;
            DateTime d = dateTimePicker1.Value;
           
 
            using (var con = new SqlCeConnection())
            {
                con.ConnectionString = ConfigurationManager.ConnectionStrings["LocalBD1ConnectionString"].ToString();
                
                //Создаем Command
                SqlCeCommand cmd = con.CreateCommand();
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "INSERT INTO Test (name, city, bday) VALUES (@nm, @ct, @bd)";
                con.Open();
 
                //Создаем 3 параметра
                SqlCeParameter param1 = cmd.CreateParameter();
                //param1.SqlDbType = SqlDbType.VarChar;
                param1.ParameterName = "nm";
                param1.Value = f;
 
                SqlCeParameter param2 = cmd.CreateParameter();
                // param2.SqlDbType = SqlDbType.VarChar;
                param2.ParameterName = "ct";
                param2.Value = s;
 
                SqlCeParameter param3 = cmd.CreateParameter();
                //param3.SqlDbType = SqlDbType.Date;
                param3.ParameterName = "bd";
                param3.Value = d;
 
                cmd.Parameters.Add(param1);
                cmd.Parameters.Add(param2);
                cmd.Parameters.Add(param3);
                cmd.ExecuteReader();
                con.Close();
 
                // выводим
                cmd = new SqlCeCommand("SELECT * FROM TEST", con);
                con.Open();
                var data = new DataTable("TEST");
                    
                data.Load(cmd.ExecuteReader());
                dataGridView3.DataSource = data;
                con.Close();
            }
        }
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2014, 23:10
Ответы с готовыми решениями:

Ошибка the sqldbtype enumeration value 31 is invalid
Всем привет! Собственно, столкнулся с такой ошибкой (см. рисунок) на Windows...

Параметр SqlDbType.Time ошибка при передаче
Есть таблица и хранимая процедура create table t1( id int not null identity...

Varchar vs nvarchar
varchar vs nvarchar.ЧТО когда юзаете?

ID имеет тип varchar
Как связать таблицы с помощью JOIN если id одной из таблиц (или обоих) имеют...

VARCHAR(32) в качестве PRIMARY KEY
SQLite. Можно ли в качестве уникального идентификатора использовать например...

5
meksik
202 / 171 / 67
Регистрация: 04.10.2014
Сообщений: 839
12.10.2014, 23:49 2
C#
1
param1.ParameterName = "nm";
строка длиной более 2-х символов не мб char о_О
0
Worldmen
3 / 3 / 3
Регистрация: 31.08.2013
Сообщений: 231
Завершенные тесты: 1
13.10.2014, 01:13  [ТС] 3
Цитата Сообщение от meksik Посмотреть сообщение
строка длиной более 2-х символов не мб char о_О
Я и Text пробовал - тоже самое.
И на это тоже ругается - param3.SqlDbType = SqlDbType.Date;
0
Worldmen
3 / 3 / 3
Регистрация: 31.08.2013
Сообщений: 231
Завершенные тесты: 1
13.10.2014, 01:24  [ТС] 4
И ещё, "nm" - это имя параметра, а не сам параметр
param1.ParameterName = "nm";
Почему я взял VarChar, потому что подсказка была (VarChar = от 1 до 8000 символов):
0
Миниатюры
Ругается на SqlDbType.VarChar  
kodv
1420 / 1094 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
13.10.2014, 05:48 5
Лучший ответ Сообщение было отмечено Worldmen как решение

Решение

Цитата Сообщение от meksik Посмотреть сообщение
строка длиной более 2-х символов не мб char о_О
Не вводите людей в заблуждение:
Во-первых, ParameterName - это имя параметра, которое имеет .NET тип System.String. То есть, в него не только можно, в него нужно запихивать строку, а не символ.
Во-вторых, приставка Var в названии типа обозначает, что это строка переменной длинны. Максимальный размер строки указывается в поле DbParameter.Size.
Цитата Сообщение от Worldmen Посмотреть сообщение
"ArgumentException не обработано ". Почему?
На самом деле все очень просто. ArgumentException говорит о том, что вы присваиваете свойству значение, которое ему нельзя присвоить. Поэтому идем на страницу описания SqlCeParameter.SqlDbType. И видим, что среди
доступных значений
Поставщик .NET для SQL Server Compact поддерживает следующие типы SqlDbType.


SqlDbType.TinyInt


SqlDbType.SmallInt


SqlDbType.Int


SqlDbType.BigInt


SqlDbType.Real


SqlDbType.Float


SqlDbType.Money


SqlDbType.Bit


SqlDbType.Binary


SqlDbType.VarBinary


SqlDbType.UniqueIdentifier


SqlDbType.Image


SqlDbType.NText


SqlDbType.NChar


SqlDbType.NVarChar


SqlDbType.Decimal


SqlDbType.DateTime
отсутствует тип данных SqlDbType.VarChar. Поэтому либо выберите другой тип для своих данных, либо удалите эти строки нафиг, раз без них все отлично работает (то есть, по-умолчанию выбирается верный тип).

Добавлено через 5 минут
PS: Параметры можно добавлять в следующем виде:
C#
1
cmd.Parameters.AddWithValue("nm", f);
Таким образом вы пишите одну строку кода, вместо 5 (если считать закомментированную) и сваливаете ответственность за определение типа параметра на .NET. Он определяет тип в зависимости от типа значения, переденного в этот метод. Как правило, определяет корректно.
0
meksik
13.10.2014, 08:21     Ругается на SqlDbType.VarChar
  #6

Не по теме:

kodv, я сам себя ввел в заблуждение)

0
13.10.2014, 08:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2014, 08:21
Привет! Вот еще темы с ответами:

Как отличить type TEXT от VARCHAR?
Подключаюсь к БД ms sql. В бд хранится таблица со следующими типами :...

Как нормально записать string в varchar ?
string connStr = @"Data Source=IP;//ip естественно я не пишу(по понятным...

Ошибка при преобразовании типа данных varchar к real
Пытаюсь обновить запись в БД. Делаю так: double stavka =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru