2016-10-25 12 views
2

Я пытаюсь создать часть программного обеспечения, которое позволяет клиенту загружать данные, сгенерированные частью оборудования, в свою собственную базу данных.C# TableAdapter для доступа и SQL Server

Для этого я разработал набор данных в Visual Studio 2015 на основе файла * .mdb с нужными таблицами. Мастер адаптера таблицы проделал замечательную работу по разработке адаптеров таблиц и запросов для строго типизированного набора данных. Все типы в этой таблице являются Text, за исключением полей Date и Time, которые являются Date/Time. Заявление генерируется следующим образом:

вставить в `` tblVoltechRunID` (RunID`, `` date`, Time`, `` ATUnitID`, PartID`, `` FixtureID`, OperatorID`, `BatchID` `` TransformerSerialNo`, OverallResult`) VALUES (?,?,?,?,?,?,?,?,?,?)

Однако, при переходе к базе данных SQL, могильные акцентов вызвано инструкция insert для отказа из-за синтаксической ошибки. Удаление серьезных акцентов вручную привело к успешному выполнению запроса.

Возможно ли использовать конструктор набора визуальных студий для создания совместимого с Table Platform адаптера на основе перекрестной платформы?

ответ

1

Можно ли использовать набор данных дизайнера Visual Studio, чтобы сделать кросс-платформенный совместимый TableAdapter?

Вы можете быть в состоянии воспользоваться тем, что ...

  1. Оба Access SQL и поддержка T-SQL квадратные скобки как ограничители для имен таблиц и столбцов, а также
  2. системы. Data.OleDb позволяет именованные параметры, хотя игнорирует имена и параметры лечит строго позиционные

... и взломать сгенерированный CommandText для InsertCommand в

INSERT INTO [tblVoltechRunID] 
([RunID], [Date], [Time], [ATUnitID], [PartID], [FixtureID], [OperatorID], [BatchID], [TransformerSerialNo], [OverallResult]) 
VALUES 
(@RunID, @Date, @Time, @ATUnitID, @PartID, @FixtureID, @OperatorID, @BatchID, @TransformerSerialNo, @OverallResult) 

Я просто проверял что-то подобное с TableAdapter для таблицы в базе данных Access, и она работала для меня, хотя он сломал Дизайнерский Вид из TableAdapter (и, честно говоря, все это кажется слишком хитроумным по моему вкусу).

+0

Спасибо за отличную обратную связь. Я согласен, что взломанный сгенерированный текст команды изволен, однако текст команды генерируется так, как если бы использовалась база данных SQL, поэтому взломать не потребуется. –

0

? Недействительный параметр имени для вашего SqlCommand.Parameters. Вы должны использовать параметры имени.

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = conn; //your SqlConnection object 

cmd.CommandText = @" 
INSERT INTO tblVoltechRunID 
    (RunID, Date, Time, ATUnitID, PartID, FixtureID, OperatorID, BatchID, TransformerSerialNo, OverallResult) 
VALUES 
    (@RunID, @Date, @Time, @AtUnitID, @PartID, @FixtureID, @OperatorID, @BatchID, @TransformerSerialNo, @)"; 

cmd.Parameters.AddWithValue("RunID", runID); //runID value which you want to put in RunID variable 
//define other parameters in same way 
+0

Хороший вопрос об именах параметров, но 'SqlCommand # ExecuteNonQuery()' все равно будет генерировать исключение, когда он встретит обратные запросы вокруг имен столбцов. –

+0

@GordThompson ahh Я помню, что вы можете избежать подобных полей здесь, похоже, я ошибаюсь. – mybirthname