Как я могу увидеть данные базы данных сервера SQL в C # и где они хранятся? - PullRequest
0 голосов
/ 29 ноября 2009

У меня есть программа, написанная на c # visual studio 2008 с базой данных SQL Server 2005 (.mdf).
Вот часть кода:

        ...   
        SqlCommandBuilder cb;
        cb = new SqlCommandBuilder(dataAdapter);
        String[] dataList =new String [8];
        ...
        DataTable resultTable = new DataTable();           
        FillDataList(data);
        dataAdapter = new SqlDataAdapter("insert into ProcessData values('" + dataList[0] + "','" + dataList[1] + "','" + dataList[2] + "','" + dataList[3] + "','" + dataList[4] + "','" + dataList[5] + "','" + dataList[6] + "','" + dataList[7]+"')", con);
        dataAdapter.Fill(resultTable); 
        ...

Мои вопросы:
1) Где хранятся данные, которые я добавил в эти строки?
2) Почему, когда я щелкаю правой кнопкой мыши в Проводнике сервера-> Соединения данных-> Таблицы-> ProcessData (имя моей таблицы) -> "Показать данные таблицы", я не вижу данные, а просто NULL в столбцах, и как я могу увидеть данные там?
3) Почему, когда я представляю эти данные в DataGridView, иногда он показывает данные, а иногда нет?
Большое спасибо!

Ответы [ 3 ]

3 голосов
/ 29 ноября 2009

Не видя больше информации об объекте datalist и его конструкции, невозможно сказать. Однако вы используете Fill и SQLDataAdapter неправильно. FILL полагается на SQLDataAdapter с установленным свойством SelectCommand, в которое ваш код вставляет инструкцию INSERT (это то, что делает конструктор SQLDataAdapter). Итак ... ваш Fill ничего не возвращает, так как нет SELECT, где должно быть.

Ваш INSERT должен быть частью InsertCommand dataadapter, и вам нужно написать отдельный оператор SELECT, чтобы получить что-нибудь в resultTable.

1 голос
/ 29 ноября 2009

Я думаю, вам нужно прочитать основную документацию по ADO.NET, прежде чем писать больше кода. Вы передаете инструкцию INSERT конструктору SqlDataAdapter, который принимает инструкцию SELECT. Вы используете метод Fill SqlDataAdapter, где вы должны использовать метод Update. Вы строите строку SQL с жестко закодированными значениями в ней, где вы должны использовать SqlParameters со ссылками на столбцы DataTable. И тот факт, что ваш DataTable называется «data», но строка SQL использует индексированные свойства из «dataList» просто опечатка? Потому что если это так, DataTable не имеет индексированного свойства.

0 голосов
/ 29 ноября 2009

Попробуйте сделать это следующим образом (вам необходимо указать правильную строку подключения):

// Get the db connection
SqlConnection dbCon = new SqlConnection("connection string");

// Select the data from the database table into a DataSet (even if it's empty)
DataSet myData = new DataSet();
SqlDataAdapter dbAdapter = new SqlDataAdapter("select * from ProcessData", dbCon);
dbAdapter.Fill(myData);
myData.Tables[0].TableName = "ProcessData"; // Keeps the table name consistent for the DataMember property

// Use the command builder to add insert, delete, update commands to your adapter
// You must have a primary key on the table for these to work, though
SqlCommandBuilder dbComBuilder = new SqlCommandBuilder(dbAdapter);

dbAdapter.InsertCommand = dbComBuilder.GetInsertCommand();
dbAdapter.DeleteCommand = dbComBuilder.GetDeleteCommand();
dbAdapter.UpdateCommand = dbComBuilder.GetUpdateCommand();

// Bind the data set to the GridView for viewing / editing
yourGridControl.AutoGenerateColumns = true; // Optional, if you haven't manually added the columns
yourGridControl.DataSource = myData;
yourGridControl.DataMember = "ProcessData";

// Use the db adapter to update the database (by calling those commands) with 
// changes made to the DataSet through the grid.  This would go in a different
// form event, like a Save Button click.
dbAdapter.Update();

Если у вас нет первичного ключа в таблице ProcessData, вы можете напрямую вставить значения с помощью этой команды:

// Insert the data directly with a command
SqlCommand dbInsCommand = new SqlCommand("insert into ProcessData values (" + val1 + "," + val2 + ")", dbCon);
dbInsCommand.ExecuteNonQuery();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...