Предварительная сборка datatable в базу данных SQL VB.NET
Привет всем, это 3-й форум, который я публикую без какой-либо помощи.....
То, что я пытаюсь сделать, очень просто, но каким-то образом это оказывается невыполнимой задачей...
Я работаю над приложением, которое имеет предварительно отформатированную datagrid. При запуске приложения DataGrid заполняется значениями.
Что мне нужно, так это когда приложение закрывается или разбивается, эти значения должны быть сохранены в базе данных SQL.
Когда приложение открыто, мне нужно, чтобы эти значения были загружены в DataGrid.
Как бы я ни старался, я не могу правильно сохранить данные, они либо дублируют одно и то же значение в полном столбце, либо вообще не работают. Я не использую утверждение "где". Так что на самом деле у меня нет ссылки, моя единственная ссылка-это количество строк. Но когда я пытаюсь использовать цикл, я получаю ошибку, потому что не могу продолжать вызывать параметр... Я понимаю, что мне нужно заполнить адаптер данных, но это дает 0 результатов.
Что я уже пробовал:
SqlBUlk от копирования не сработает для меня это просто придурки одной базы данных в другую.
Привязка набора данных - не работает для меня, потому что мне нужно иметь возможность управлять строками из приложения, а привязка отключает его.
Хранимая процедура, SQL-команды дали 0 результатов - я могу только обновить значение определенной индексной ячейки/строки по одному в то время. У меня есть в клиниках:
Большинство страниц MSN/форумов и т. д. И все еще не везет....
То, как я загружаю данные:
Dim connectionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True" Dim sql As String = "Select * FROM Table1" Dim connection As New SqlConnection(connectionString) Dim dataadapter As New SqlDataAdapter(sql, connection) Dim ds As New DataSet() connection.Open() dataadapter.Fill(ds, "Data") ' Data tags data 'Count Rows In data Table Dim commandRowCount As New SqlCommand("Select COUNT(*) FROM " + "dbo.Table1", connection) Dim countStart As Long = System.Convert.ToInt32(commandRowCount.ExecuteScalar()) TextBox1.Text = countStart For x = 0 To countStart - 1 If x = 0 Then DataG.Rows.Add(1) ElseIf x < countStart - 1 Then DataG.Rows.Add(x) End If DataG.Rows(x).Cells("Column1").Value = ds.Tables("Data").Rows(x).Item("Column1") DataG.Rows(x).Cells("Column2").Value = ds.Tables("Data").Rows(x).Item("Column2") DataG.Rows(x).Cells("Column3").Value = ds.Tables("Data").Rows(x).Item("Column3") Next connection.Close() End Sub
Вот то, что я пытался сохранить данные. Это, очевидно, работает только для одной ячейки, и я не могу сделать цикл. Tst_1 SQL то, что я написал как. Обновить таблицу 1 установить столбец 1=@Column1 и т. д':
Private Sub Save_1() Dim connetionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True" Dim con As New SqlClient.SqlConnection(connetionString) con.Open() Dim cmd As New SqlClient.SqlCommand("Tst_1", con) cmd.CommandType = CommandType.StoredProcedure Dim countR As Integer countR = DataG.RowCount TextBox1.Text = countR Dim ds As New DataSet cmd.Parameters.Add(New SqlClient.SqlParameter("@Column1", DataG.Item("Column1", rowIndex:=0).Value)) cmd.ExecuteNonQuery() con.Close()
Вот еще одно решение, которое должно работать.... но дает нулевые результаты я предполагаю, что это правильный способ, так как он загружает адаптер данных, но ничего не сохраняет:
Private Sub named() Dim DA As SqlDataAdapter = New SqlDataAdapter Dim Parm As New SqlParameter Dim connectionString As String = ("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True") Dim con As New SqlClient.SqlConnection(connectionString) con.Open() Dim ds As New DataSet() DA.InsertCommand = New SqlCommand("INSERT Into Table1(Column1, Column2, Column3) Values(@Column1, @Column1, @Column3)", con) Parm = DA.InsertCommand.Parameters.Add(New SqlParameter("@Column1", SqlDbType.NVarChar, 50, "Column1")) Parm = DA.InsertCommand.Parameters.Add(New SqlParameter("@Column2", SqlDbType.NVarChar, 50, "Column2")) Parm = DA.InsertCommand.Parameters.Add(New SqlParameter("@Column3", SqlDbType.NVarChar, 50, "Column3")) DA.TableMappings.Add("Table1", "DataG") DA.Update(ds, "Table1") End Sub
Gerry Schmitz
Люди не могут помочь, потому что никто не понимает смысла вашего кода или почему вы должны "контролировать строки" (Что бы это ни значило).
Member 14072220
Джерри Шмитц: вопрос не в том, почему, а в том, как. Если вы не в состоянии понять, я не могу вам помочь.
Sinisa Hajnal
Создайте уникальный идентификатор в своей базе данных (autoincrement ID - это нормально) - включите его в свой запрос и спрячьте в потоках данных. Таким образом, вы можете вызывать insert, update и delete с помощью первичного ключа. И rowindex больше не будет проблемой.
Member 14072220
Синиса Хайнал: я думала об этом, так как единственный способ обновить базу данных-это иметь правильный первичный ключ?