C # SqlDataAdapter.Fill дает ошибку о преобразовании данных при передаче параметра с датой - PullRequest
2 голосов
/ 18 августа 2010

Я пытаюсь заполнить таблицу данных с помощью 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 Ответ

2 голосов
/ 21 августа 2010

На первый взгляд, глядя на первую строку вашего кода, посмотрите, где находится firstSSN:

@"Select * From tblEmployees WHERE Name = " + firstSSN

Я мог бы представить, что «Имя» - это поле nvarchar, на которое ссылается сообщение об ошибке.и если firstSSN является только целочисленным значением, попробуйте поставить отметки '' вокруг firstSSN следующим образом:

@"Select * From tblEmployees WHERE Name = '" + firstSSN + "'"

В противном случае убедитесь, что тип поля «Имя» соответствует типу параметра, которым вы являетесьпереходя в вашу команду.Скорее всего, это просто проблема с типом данных.

Одна рекомендация, которая у меня для вас есть - я только что начал экспериментировать с LINQ на днях и считаю ее довольно удобной для извлечения, обработки и фильтрации данных впростой в использовании набор записей.Доступна вся документация о том, как выполнять запросы с помощью LINQ, так что посмотрите, если у вас есть несколько минут.Надеюсь, это поможет.

...