Данные Unicode, отправленные в SqlDataAdapter через SqlParameter, не возвращают результаты - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь отправить значение Unicode в SqlDataAdapter через SqlParameter, чтобы заполнить набор данных, и я не получаю никакого результата. Я думаю, что проблема заключается в значении Unicode.

Я пытался добавить N перед параметром, но без кода результата SQL-запрос просто не работает. Проверил этот запрос с идентификатором Unicode N, и он работал в MSSMS.

var text = "მოძებნე არაფერი";
var searchWord="მოძებნე";
var searchItem = text.Replace(searchWord, "");
searchItem.Replace(" ", "");
string select = "SELECT ProductID, ProductName, ProductDescription, ProductImage FROM dbo.Product WHERE ProductName LIKE @name";
var dataAdapter = new SqlDataAdapter(select, connection);
dataAdapter.SelectCommand.Parameters.Add(new SqlParameter
{
    ParameterName = "@name",
    Value = "%" + searchItem + "%",
    SqlDbType = SqlDbType.NVarChar,
    Size = 15
});
//var commandBuilder = new SqlCommandBuilder(dataAdapter);
var ds = new DataSet();
dataAdapter.Fill(ds);
dataAdapter.Update(ds);
dataGridView1.DataSource = ds.Tables[0];
MessageBox.Show("done");

Ответы [ 2 ]

1 голос
/ 14 мая 2019

searchItem имеет пробел. searchItem.Replace(" ", ""); не удаляет пространство из searchItem, оно создает новую временную строку без него. Хотя это значение никогда не используется.

Чтобы удалить первое слово и , обрезать любой пробел, можно использовать String.Trim :

var searchItem = text.Replace(searchWord, "").Trim();

Строки в .NET являются неизменяемыми. Функции манипуляции со строками не изменяют строки, для которых они вызваны, они создают новые строки.

0 голосов
/ 14 мая 2019

Вам нужно поставить одинарные кавычки в%.Пример: '% test%'

var text = "მოძებნე არაფერი";
var searchWord="მოძებნე";
var searchItem = text.Replace(searchWord, "");
searchItem.Replace(" ", "");
string select = "SELECT ProductID, ProductName, ProductDescription, ProductImage FROM dbo.Product WHERE ProductName LIKE @name";
var dataAdapter = new SqlDataAdapter(select, connection);
dataAdapter.SelectCommand.Parameters.Add(new SqlParameter
{
    ParameterName = "@name",
    Value = "'%" + searchItem + "%'", // Edited line
    SqlDbType = SqlDbType.NVarChar,
    Size = 15
}
);
//var commandBuilder = new SqlCommandBuilder(dataAdapter);
var ds = new DataSet();
dataAdapter.Fill(ds);
dataAdapter.Update(ds);
dataGridView1.DataSource = ds.Tables[0];
MessageBox.Show("done");

Я проверил это здесь, и оно сработало.

С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...