powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / динамически подсунуть dbtype
14 сообщений из 14, страница 1 из 1
динамически подсунуть dbtype
    #38860981
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подмогните по шарпу, плз. Пишу с телефона, поэтому теги использовать не могу, постараюсь просто текстом.
Вобщем задачка такая: есть табличка с колонками dt и есть массив sqlparameter[] par. Надо перебрать колонки dt и параметры в par. По ходу перебора если имя колонки совпадёт с именем параметра - сунуть в этот параметр значение из этой колонки. Всё просто вроде бы, но никак не получается при присвоении
рar[i].value=dr[columnname], где dr - datarow in dt
сконвертить dr[columnname] под тип par[i].dbtype, который заранее неизвестен и определяется по ходу перебора массива par. Подскажите как в конвертации использовать динамический тип данных.
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861005
Фотография PA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861010
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Что-то вроде этого

Код: c#
1.
2.
foreach (DataColumn cl in dt.Columns) 
     sqlparameter["@"+cl.Name].value = dt.Row[какой-то][cl.Name]
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861015
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PA Convert.ChangeType там надо Type, а мне надо DbType, потому как Type от par[i] будет SqlParameter
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861017
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
sposadPA Convert.ChangeType там надо Type, а мне надо DbType, потому как Type от par[i] будет SqlParameter
Я не понимаю проблему с типами.

sqlparameter[...].value - объект
dt.Row[...][...] - объект

Какие проблемы с приведением?
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861018
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Что-то вроде этого

Код: c#
1.
2.
foreach (DataColumn cl in dt.Columns) 
     sqlparameter["@"+cl.Name].value = dt.Row[какой-то][cl.Name]

млин, да я ж пишу, что как перебрать и присвоить я знаю, мне надо присваиваемое значение сконвертить под тот тип данных, который определится в параметре по ходу.
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861020
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
sposadмлин, да я ж пишу, что как перебрать и присвоить я знаю,
Cat2Я не понимаю проблему с типами.

sqlparameter[...].value - объект
dt.Row[...][...] - объект

Какие проблемы с приведением?
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861033
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2sposadпропущено...
там надо Type, а мне надо DbType, потому как Type от par[i] будет SqlParameter
Я не понимаю проблему с типами.

sqlparameter[...].value - объект
dt.Row[...][...] - объект

Какие проблемы с приведением?ты думаешь, что этой проблемы не будет? Я вообще привык с шарпе к малине прибавлять малину, не надеясь, что она сама своих опознаша. В вб мож и прокатило бы, а тут скорее всего будут проблемы, особенно где дата попадётся.

Хоспаде, до чего же говённый инет у мтс
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861172
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
sposadВ вб мож и прокатило бы, а тут скорее всего будут проблемы, особенно где дата попадётся.

В параметрах sqlCommand тоже прокатывает. Разумеется если только в параметре не стоит тип Дата, а в соответствующем поле таблицы - "Осень"

Причем вот такой кусок

Код: c#
1.
2.
3.
SqlConnection con = new SqlConnection();
SqlCommand sqlCommand  = new SqlCommand("@par", con);
sqlCommand.Parameters.Add("Select @par", SqlDbType.DateTime).Value = "Осень";



Не вызовет ошибки во время выполнения, ошибка будет только при попытке выполнить sqlCommand.
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861197
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2sposadВ вб мож и прокатило бы, а тут скорее всего будут проблемы, особенно где дата попадётся.

В параметрах sqlCommand тоже прокатывает. Разумеется если только в параметре не стоит тип Дата, а в соответствующем поле таблицы - "Осень"

Причем вот такой кусок

Код: c#
1.
2.
3.
SqlConnection con = new SqlConnection();
SqlCommand sqlCommand  = new SqlCommand("@par", con);
sqlCommand.Parameters.Add("Select @par", SqlDbType.DateTime).Value = "Осень";



Не вызовет ошибки во время выполнения, ошибка будет только при попытке выполнить sqlCommand.попробую, но всё равно, даже если получится, вопрос интересный, торкнуло меня, хочу разобраться, может где понадобиться.
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861318
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sposad,

SqlParameter сам подбирает DbType по фактическому типу переданного значения, который редко когда бывает именно object:
Код: c#
1.
2.
3.
4.
5.
6.
var dt = new DataTable();
dt.Columns.Add("foo", typeof (int));
var dr = dt.NewRow();
dr["foo"] = 1;
dt.Rows.Add(dr);
Console.WriteLine(dt.Rows[0]["foo"].GetType());


- догадайтесь с трех раз, что выведет вышеприведенное. Указывать явно тип параметра требуется достаточно редко - например, когда нужно передать Size параметра, или задать ParameterDirection, или если параметр - табличный тип.
sposadвопрос интересный, торкнуло меня, хочу разобраться, может где понадобиться.
Просто линейный код по соответствию тип CLR - DbType. Посмотрите, например, исходники Dapper - там примерно так и делается:
Код: c#
1.
2.
3.
4.
5.
6.
7.
static SqlMapper()
{
  typeMap = new Dictionary<Type, DbType>();
  typeMap[typeof(byte)] = DbType.Byte;
  typeMap[typeof(sbyte)] = DbType.SByte;
  typeMap[typeof(short)] = DbType.Int16;
........
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861320
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Таблицу соответствия типов см. здесь: https://msdn.microsoft.com/en-us/library/cc716729(v=vs.110).aspx
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861371
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

спасибо!
...
Рейтинг: 0 / 0
динамически подсунуть dbtype
    #38861752
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Parameters.AddWithValue - сам определит подходящий тип
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / динамически подсунуть dbtype
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]