Строки SQL Server, дополненные пробелами при вставке - почему? - PullRequest
4 голосов
/ 02 марта 2012

когда я пытался вставить некоторые данные в SQL Server, были эти дополнительные символы

, например, мой textBox1.text == "SAMPLE"
, тогда это был код

string qry = "insert into FinalImages (FinalImageName, Date) values(@FinalImageName, @Date)";

SqlConnection c = new SqlConnection(c_string);
//Initialize SqlCommand object for insert
SqlCommand SqlCom = new SqlCommand(qry, c);

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, 40)).Value = textBox1.Text;
SqlCom.Parameters.Add(new SqlParameter("@Date", SqlDbType.Char, 40)).Value = DateTime.Now.ToString("MM/dd/yyyy");

, но когдая проверяю в таблицах запись была эта "SAMPLE ", она имеет 34 пробелы добавлены
что должно быть не так?

Ответы [ 4 ]

12 голосов
/ 02 марта 2012

Не используйте SqlDbType.Char, используйте NVarChar. Char - строка фиксированного размера, дополненная пробелами (ужасный монстр).

7 голосов
/ 02 марта 2012

Вы используете char(40). Таким образом, у вас всегда будет строка длиной 40. Если она будет короче, SQL-сервер автоматически заполнит оставшиеся пробелы.
Char обычно используется только для фиксированной длины данных, например, CustomerNumbers

Вы хотите использовать varchar(40) в этом случае, чтобы получить переменную длину.

7 голосов
/ 02 марта 2012

Вы выбрали CHAR(40) в качестве типа параметра. Вы имели в виду VARCHAR(40).

1 голос
/ 02 марта 2012

Вы указываете, что длина этого параметра составляет 40 символов, а не переменная длина:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.Char, ***40***)).Value = textBox1.Text;

Так что полезно добавить указанное вами значение.

Просто используйте перегрузку, которая нене принимает параметр длины и использует VarChar:

SqlCom.Parameters.Add(new SqlParameter("@FinalImageName", SqlDbType.VarChar)).Value = textBox1.Text;
...