DataAdapter.update,数据库没有

DataAdapter.update,数据库没有,第1张

我有两处使用了DataAdapterupdate,其中一处更新成功,另一处无任何反应(数据文件的时间戳没有变化。)

第一处的场景是:

先从数据库文件中select 读取数据到thisdataGridView1DataSource中,然后在thisdataGridView1DataSource修改数据。之后执行一下代码,数据库记录是可以更新的

C# code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

private void button4_Click(object sender, EventArgs e)

{

DataTable dt = thisdataGridView1DataSource as DataTable;

UpdateTable(dt);

foreach (DataRow myRow in dtRows)

{

foreach (DataColumn myColumn in dtColumns)

{

ConsoleWrite(myRow[myColumn] + "|" + myRow[myColumn]GetType() + "|");

}

ConsoleWriteLine();

}

ConsoleWriteLine();

}

第二处用法的场景,我是通过读取csv文本文件形成了一个dataTable,然后update数据库,数据库文件无任何变化。

C# code

1

2

3

4

5

6

7

8

9

10

csvImportClass csvImport = new csvImportClass();

//导入tbl_cumgm_fmt_cfgcsv

string filePath = @"C:\\testonecsv";

string fileName = PathGetFileName(filePath);

string csvFolder = PathGetDirectoryName(filePath);

string csvSql = "select from " + filePath;

csvImportCsvReader(csvSql, csvFolder, fileName);//这里得出的csvImportCsvDataTables[fileName]数据都是正常的

UpdateTable(csvImportCsvDataTables[fileName]);

更多内容参考>

加载了 DataSet 后,您可以修改数据,DataSet 将跟踪修改。可将 DataSet 对象视为从数据库中检索出的缓存于内存中的数据,由表集合、关系和约束组成。

若要更新 DataSet 并将这些更新发回数据库,请按照下列步骤 *** 作:

打开 Microsoft Visual Studio NET。

在 Visual Basic NET 中新建控制台应用程序。默认情况下,Visual Studio 创建一个“静态模块”和一个空的 Main() 过程。

确保项目包括一个对 System 和 SystemData 命名空间的引用。在 System、SystemData 和 SystemDataSqlClient 命名空间上使用 Imports 语句,这样,在后面的代码中就不需要从这些命名空间中限定声明。必须在任何其他声明之前使用这些语句。

Imports System

Imports SystemData

Imports SystemDataSqlClient

在修改数据并将更改发回数据库之前,必须将该信息加载到 DataSet 中。有关详细过程,请参见 301216 为避免重复,将不详细提供该步骤中的代码。

下面代码中的连接字符串指向位于本地计算机(或运行这些代码的计算机)上的 SQL Server。如果需要的话,请用您自己的设置替换该字符串。总之,先创建连接,然后创建数据适配器;该适配器用于将数据填充到 DataSet 中。

注意:在本文提供的示例代码中,您必须将 UID=UserName 和 Password=StrongPassword 更改为正确的值。请确保该用户 ID 具有在数据库中执行此 *** 作所需的适当权限。

Dim sConnectionString As String

' Modify the following code to correctly connect to your SQL Server

sConnectionString = "Password=StrongPassword;User ID=UserName;" & _

"Initial Catalog=pubs;" & _

"Data Source=(local)"

Dim objConn As New SqlConnection(sConnectionString)

objConnOpen()

' Create an instance of a DataAdapter

Dim daAuthors As _

New SqlDataAdapter("Select From Authors", objConn)

' Create an instance of a DataSet, and retrieve data from the Authors table

Dim dsPubs As New DataSet("Pubs")

daAuthorsFillSchema(dsPubs, SchemaTypeSource, "Authors")

daAuthorsFill(dsPubs, "Authors")

现在已经加载了数据,您可以对其进行修改。添加行(或记录)有多种方法。该代码示例使用一个三步式过程:

将以下代码粘贴到第 4 步中的代码之后:

'

'BEGIN ADD CODE

' Create a new instance of a DataTable

Dim tblAuthors As DataTable

tblAuthors = dsPubsTables("Authors")

Dim drCurrent As DataRow

' Obtain a new DataRow object from the DataTable

drCurrent = tblAuthorsNewRow()

' Set the DataRow field values as necessary

drCurrent("au_id") = "993-21-3427"

drCurrent("au_fname") = "George"

drCurrent("au_lname") = "Johnson"

drCurrent("phone") = "800 226-0752"

drCurrent("address") = "1956 Arlington Pl"

drCurrent("city") = "Winnipeg"

drCurrent("state") = "MB"

drCurrent("contract") = 1

'Pass that new object into the Add method of the DataTableRows collection

tblAuthorsRowsAdd(drCurrent)

MsgBox("Add was successful")

'END ADD CODE

从 DataTable 获取新的 DataRow 对象。

根据需要设置 DataRow 字段值。

将新的对象传递给 DataTableRows 集合的 Add 方法。

若要编辑现有行,请获取相应的 DataRow 对象,然后为一列或多列提供新值。必须先找到正确的行,由于您加载了表的架构和数据(在第 4 步中对 FillSchema 的调用),因此这一过程非常简单。有了架构,表就知道哪个列是它的主键,同时Rows 集合的 Find 方法也就可用了。

Find 方法返回 DataRow 对象,并且其主键中有了一个具体的值(在本例中为 au_id)。在有了 DataRow 之后,可对列进行修改。您不必包装 BeginEdit 和 EndEdit 中的修改,但包装可简化 DataSet 必须完成的工作,并让 DataSet 可以在调用 EndEdit 的同时执行其验证检查。将以下代码粘贴到 ADD 代码之后:

'

'BEGIN EDIT CODE

drCurrent = tblAuthorsRowsFind("213-46-8915")

drCurrentBeginEdit()

drCurrent("phone") = "342" & drCurrent("phone")ToStringSubstring(3)

drCurrentEndEdit()

MsgBox("Record edited successfully")

'END EDIT CODE

要用所有这些更改来更新原始数据库,可将 DataSet 传递到 DataAdapter 对象的 Update 方法。

不过,在调用 Update 之前,必须先设置 DataAdapter 对象的 InsertCommand、UpdateCommand 和DeleteCommand 属性。可手动编写 SQL 并用相应的 SqlCommand 对象填充这三个属性,但也可以使用 Visual Studio NET 自动生成这三个命令。

若要在需要时生成所需的命令,必须创建 SqlCommandBuilder 对象的实例并使用该构造函数中的 DataAdapter。如果想使用此方法(在以下代码示例中阐释),您的表必须有主键信息。要访问主键信息,可调用 FillSchema,然后将DataAdapter 的 MissingSchemaAction 属性设置为 AddWithKey,或在代码中手动设置主键。将以下代码粘贴到 EDIT 代码之后:

'

'BEGIN SEND CHANGES TO SQL SERVER

Dim objCommandBuilder As New SqlCommandBuilder(daAuthors)

daAuthorsUpdate(dsPubs, "Authors")

MsgBox("SQL Server updated successfully" & chr(13) & "Check Server explorer to see changes")

' END SEND CHANGES TO SQL SERVER

要完全删除一行,可使用 DataRow 对象的 Delete 方法。请注意,Rows 集合包含 Remove 和 RemoveAt 两个方法,它们似乎删除了行,但实际上只是将行从集合中移除。只有 Delete 方法才会将删除结果发回源数据库中。将以下代码粘贴到 SEND CHANGES TO SQL SERVER 代码之后:

'

'BEGIN DELETE CODE

drCurrent = tblAuthorsRowsFind("993-21-3427")

drCurrentDelete()

MsgBox("Record deleted successfully")

'END DELETE CODE

将这些更改发送到 SQL Server 以移除早先添加的记录。将以下代码粘贴到 DELETE 代码之后:

'

' CLEAN UP SQL SERVER

daAuthorsUpdate(dsPubs, "Authors")

MsgBox("SQL Server updated successfully" & Chr(13) & Chr(13) & "Check Server Explorer to see changes")

保存项目。

在调试菜单上单击启动运行该项目。请注意,将出现几个消息框,它们指示代码的执行进度并让您能够在执行过程中查看数据的当前状态。

完整代码列表

Imports System

Imports SystemData

Imports SystemDataSqlClient

Module Module1

Sub Main()

Dim sConnectionString As String

' Modify the following code to correctly connect to your SQL Server

sConnectionString = "Password=StrongPassword;User ID=UserName;" & _

"Initial Catalog=pubs;" & _

"Data Source=(local)"

Dim objConn As New SqlConnection(sConnectionString)

objConnOpen()

' Create an instance of a DataAdapter

Dim daAuthors As _

New SqlDataAdapter("Select From Authors", objConn)

' Create an instance of a DataSet, and retrieve data from the Authors table

Dim dsPubs As New DataSet("Pubs")

daAuthorsFillSchema(dsPubs, SchemaTypeSource, "Authors")

daAuthorsFill(dsPubs, "Authors")

'

'BEGIN ADD CODE

' Create a new instance of a DataTable

Dim tblAuthors As DataTable

tblAuthors = dsPubsTables("Authors")

Dim drCurrent As DataRow

' Obtain a new DataRow object from the DataTable

drCurrent = tblAuthorsNewRow()

' Set the DataRow field values as necessary

drCurrent("au_id") = "993-21-3427"

drCurrent("au_fname") = "George"

drCurrent("au_lname") = "Johnson"

drCurrent("phone") = "800 226-0752"

drCurrent("address") = "1956 Arlington Pl"

drCurrent("city") = "Winnipeg"

drCurrent("state") = "MB"

drCurrent("contract") = 1

'Pass that new object into the Add method of the DataTableRows collection

tblAuthorsRowsAdd(drCurrent)

MsgBox("Add was successful")

'END ADD CODE

'

'BEGIN EDIT CODE

drCurrent = tblAuthorsRowsFind("213-46-8915")

drCurrentBeginEdit()

drCurrent("phone") = "342" & drCurrent("phone")ToStringSubstring(3)

drCurrentEndEdit()

MsgBox("Record edited successfully")

'END EDIT CODE

'

'BEGIN SEND CHANGES TO SQL SERVER

Dim objCommandBuilder As New SqlCommandBuilder(daAuthors)

daAuthorsUpdate(dsPubs, "Authors")

MsgBox("SQL Server updated successfully" & chr(13) & "Check Server explorer to see changes")

' END SEND CHANGES TO SQL SERVER

'

'BEGIN DELETE CODE

drCurrent = tblAuthorsRowsFind("993-21-3427")

drCurrentDelete()

MsgBox("Record deleted successfully")

'END DELETE CODE

'

' CLEAN UP SQL SERVER

daAuthorsUpdate(dsPubs, "Authors")

MsgBox("SQL Server updated successfully" & Chr(13) & Chr(13) & "Check Server Explorer to see changes")

End Sub

End Module

在确定按钮的事件中写代码:

SqlCommandBulider bulider=new SqlCommandBulider(adapter);

adapterUpdate(dataSet,"数据集中的表名");

还是这样回答你的问题吧~

dataset是什么?

dataset是“内存中的数据库”,也就是说,dataset可以包含若干张表(视图),关系,约束等,

dataadapter是什么?

dataadapter 是实际的数据库(如sql server或access)到dataset的一个桥梁,主要负责数据库的数据填充到dataset里面,以及dataset的数据更新到数据库里面,

我说的应该很清楚吧?

DataAdapterFill (DataSet)

在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个 DataTable。

由 NET Compact Framework 支持。

DataAdapterFill (DataTable, IDataReader)

在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个 DataTable。

由 NET Compact Framework 支持。

DataAdapterFill (DataTable[], IDataReader, Int32, Int32)

在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个 DataTable。

由 NET Compact Framework 支持。

DataAdapterFill (DataSet, String, IDataReader, Int32, Int32)

在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个 DataTable。

由 NET Compact Framework 支持。

以上就是关于DataAdapter.update,数据库没有全部的内容,包括:DataAdapter.update,数据库没有、数据库 SQL server 关于dataadapter 中update 用法,如果我在update的那个表里面有一个主键又是外键、如何通过使用 Visual Basic NET 从 DataSet 对象中更新数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9334664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存