корпоративная библиотека dbcommand метод AddInParameter - PullRequest
1 голос
/ 29 августа 2011

Я давно пользуюсь корпоративной библиотекой.Мы меняем тип столбца varchar на nvarchar в базе данных для поддержки другого языка.У нас есть какой-то унаследованный код, который использует традиционный способ подключения к базе данных, такой как использование объекта команды.В этом коде при создании sqlparameters указывается тип данных параметра, будь то int или varchar.Там легко перейти с varchar на nvarchar.

Но меня интересует вопрос об использовании корпоративной библиотеки, где мы указываем тип данных .net, например строку, и я считаю, что корпоративная библиотека преобразует этот тип в sqldatatype внутри себя при вызове хранимой процедуры.

db.AddInParameter (cmd, "@SortOrder", DbType.String, SortOrder)

Какая корпоративная библиотека типов данных внутренне преобразует?варчар или нварчар?Безопасно ли использовать nvarchar повсюду в унаследованном нами коде?

Ответы [ 2 ]

1 голос
/ 30 августа 2011

Как я уже говорил в комментариях, не нужно беспокоиться о преобразовании типов данных .net позаботится об этом и обработает его автоматически. ADO.net может преобразовывать типы данных String в varchar, nvarchar, char, ntext, text в SqlServer. Указывая типы данных хранимых процедур, сообщите ADO.net, чтобы преобразовать данные в соответствующий тип данных в SqlServer.

почему мы указываем тип данных при создании объекта sqlparameter или вызове AddInParameter, если .net позаботится об этом?

РЕДАКТИРОВАТЬ: Основываясь на своем вопросе в комментариях, есть:

db.Parameters.AddWithValue("@SortOrder", SortOrder);

, который не является обязательным для указания типа данных вашего входного параметра.

0 голосов
/ 30 августа 2011

Я предполагаю, что вы используете SQL Server.

DbType.String для nvarchar, а DbType.AnsiString для varchar.http://msdn.microsoft.com/en-us/library/system.data.dbtype.aspx

Поскольку вы вызываете хранимую процедуру, ваш параметр автоматически преобразуется в любой тип строки, указанный в хранимой процедуре.Например, если входное значение - DbType.String, а параметр - varchar, SQL Server преобразует его для вас.Не делайте этого наоборот (в коде в DbType.AnsiString, но хранимая процедура ожидает nvarchar), потому что вы получите только анси-символы в хранимой процедуре.

//Don't do this! you will get 'h?ello' in the SP instead of 'hܒello'
SqlParameter("input", "h\u0712ello") { DbType = System.Data.DbType.AnsiString });

Также в EntLib,существует способ вызова хранимых процедур без необходимости указывать имена параметров и тип данных.Вот так:

//calls AddToInventory stored procedure
//the 2 parameters are automatically mapped.
db.ExecuteNonQuery("AddToInventory", 1, "Life Jacket");
...