SQL -запрос с строителем струн в C#C#

Место общения программистов C#
Anonymous
 SQL -запрос с строителем струн в C#

Сообщение Anonymous »

Я очень новичок в C#, и я столкнулся с некоторыми проблемами, когда пытаюсь выполнить SQL -запрос с StringBuilder. < /p>
Здесь является частью таблицы с именем: < /p>

Код: Выделить всё

| ID   | Name      | InternalID |
|:----:|:---------:| :---------:|
| 1    | Emory Lu  | 84765      |
| ...  | ...       | ...        |
| 8    | John Smith| 52455      |
| 9    | John smith| 49         |
| ...  | ...       | ...        |
< /code>
Обратите внимание, что в этой таблице присваивается два разных внутренних (тип строки). Во второй записи его фамилия началась с строчных "S".public DataTable findInternalID(string name)
{
RecordConnection.Open();
DataTable output = new DataTable();
OleDbCommand bdCommand = RecordConnection.CreateCommand() as OleDbCommand;
StringBuilder x = new StringBuilder();

// SELECT InternalID FROM EmployeeList WHERE Name = "(name)"
x.AppendLine("SELECT InternalID ");
x.AppendLine("FROM EmployeeList ");
x.AppendLine($"WHERE Name LIKE '%{name}%'");

bdCommand.CommandText = x.ToString();
_dataAdapter = new OleDbDataAdapter(bdCommand);
_dataAdapter.Fill(output);

RecordConnection.Close();
return output;

}
< /code>
Этот блок кода работает нормально для сотрудников, есть только одна запись, но для сотрудников с несколькими записями он заполнит все записи внутренних и выводов одновременно из -за этой строки: < /p>
x.AppendLine($"WHERE Name LIKE '%{name}%'");
< /code>
Поэтому я попытался изменить ключевое слово «аналогично" = ": < /p>
x.AppendLine($"WHERE Name = '%{name}%'");
< /code>
Но это дает мне ошибку. < /p>
Как я могу отредактировать свой код, поэтому при вводе «Джон Смит» только выводит «52455» и ввод "John Smith" только выходы "49".  string name = "John Smith"; // or John smith
DataTable output = _accessManager.findInternalID(name);

String message = result.Rows[0][0].ToString(); // Or ROWS[1][0]
MessageBox.Show(message);
< /code>
Кстати, я использовал MS Access :) < /p>
================= Проблема решила! =================== < /p>
Я очень благодарю всех за то, что помог мне. Я принял во внимание предложение каждого, и вот мой окончательный код. Я использовал функцию strComp () 
, которая идеально подходит для выполнения чувствительного к случаю запроса SQL в MS Access:

Код: Выделить всё

public DataTable findInternalID(string name)
{
RecordConnection.Open();
DataTable output = new DataTable();
OleDbCommand bdCommand = RecordConnection.CreateCommand() as OleDbCommand;

StringBuilder x = new StringBuilder();
x.AppendLine("SELECT InternalID ");
x.AppendLine("FROM EmployeeList ");
x.AppendLine($"WHERE StrComp(Name, @name, 0) = 0;");

bdCommand.CommandText = x.ToString();
bdCommand.Parameters.AddWithValue("name", $"{name}");

_dataAdapter = new OleDbDataAdapter(bdCommand);
_dataAdapter.Fill(output);

RecordConnection.Close();
return output;
}
Только несколько примечаний для будущей ссылки, если вы используете доступ MS, то соберите и varbinary (max) не подходящие для вас.

Подробнее здесь: https://stackoverflow.com/questions/711 ... in-c-sharp

Вернуться в «C#»