C# SqlDataAdapter.Fill дает ошибку о преобразовании данных при передаче параметра с датой
Я пытаюсь заполнить таблицу данных с помощью SqlDataAdapter в C#. Я не очень знаком с объектами, и в основном работаю над шаблоном чужого кода, чтобы попытаться выяснить, как он работает. Вот основная форма.
SqlCommand command = new SqlCommand(@"SELECT * FROM tblEmployees WHERE Name = " + firstSSN,connection);
SqlDataAdapter adapter = new SqlDataAdapter(command.CommandText.ToString(), connection.ConnectionString.ToString());
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adapter);
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);
И это прекрасно работает на их форму. Я попытался сделать то же самое с моим, но получил ошибку при попытке преобразовать nvarchar в столбец типа данных int. Я просмотрел MSDN и попробовал следующее: 1) Добавление столбцов в DataTable с соответствующими именами / типами / первичными ключами из tblEmployees. 2) Добавление TableMapping в DataAdapter, хотя я не уверен на 100%, что у меня есть правильный синтаксис в этой части. Я делаю:
adapter.TableMappings.Add("work", "dbo.tblEmployees");
для этого. DataTable называется "работа", но я не уверен, что у меня есть правильный синтаксис, я добавляю имя таблицы, как оно отображается в SQL Server Management Studio, но не знаю, как я проверяю, правильно ли он связывается.
Спасибо за любую помощь, которую вы можете предоставить. Я бьюсь головой об этом до такой степени, что я на грани того, чтобы приблизиться к своей цели совершенно другим способом и выбросить то, что у меня есть.
1 ответ
На первый взгляд, глядя на первую строку вашего кода, посмотрите, где firstSSN
является:
@"Select * From tblEmployees WHERE Name = " + firstSSN
Я бы предположил, что "Имя" - это поле nvarchar, на которое ссылается сообщение об ошибке, и если firstSSN - только целочисленное значение, попробуйте поставить отметки "" вокруг firstSSN следующим образом:
@"Select * From tblEmployees WHERE Name = '" + firstSSN + "'"
В противном случае убедитесь, что тип поля "Имя" соответствует типу параметра, который вы передаете в команду. Скорее всего, это просто проблема с типом данных.
Я рекомендую вам одну рекомендацию - я только что начал экспериментировать с LINQ на днях, и считаю, что его довольно удобно использовать для извлечения, манипулирования и фильтрации данных в простой в использовании набор записей. Доступна вся документация о том, как выполнять запросы с помощью LINQ, так что посмотрите, если у вас есть несколько минут. Надеюсь это поможет.