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, так что посмотрите, если у вас есть несколько минут. Надеюсь это поможет.

Другие вопросы по тегам