在Pocket PC上使用VB.NET和SQLCE开发数据库程序的问题???

xiaoyupzy 2004-12-21 06:17:25
在PPC 上开发一个数据库程序,使用的软硬件环境是:
Pocket PC (PPC 2003 系统)
SQL CE
Visual Basic.NET in VS 2003

问题是:现在有一个数据库Abpm.sdf, 其中有一个数据表 Paraset, 想要修改数据表Paraset中的记录
(Paraset中只有一条记录), 想给他的各个字段赋予新值, 使用下面的代码,但是总是有异常错误,望高人指点,谢谢!


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Button1.Click

Dim sqlDS As DataSet
Dim sqlDA As SqlCeDataAdapter

Dim myConnString As String = "Data Source=\My Documents\Abpm.sdf"
Dim myConnection As New SqlCeConnection(myConnString)
myConnection.Open()


sqlDA = New SqlCeDataAdapter("SELECT * FROM Paraset", myConnection)

sqlDA.Fill(sqlDS, "Paraset")

sqlDS.Tables("Paraset").Rows(0).Item(0) = 1


sqlDA.Update(sqlDS, "Paraset")

End Sub
...全文
234 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyupzy 2005-01-07
  • 打赏
  • 举报
回复
问题总算解决了,结帖
xiaoyupzy 2004-12-23
  • 打赏
  • 举报
回复
mylovezcp(笑傲江湖), 帮帮俺吧!
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
怎么定义主键? 能不能说详细点?
mylovezcp 2004-12-22
  • 打赏
  • 举报
回复
你的表没有定义主键吧,你定义主键后试试。
haoztao 2004-12-22
  • 打赏
  • 举报
回复
这方面没有弄过,帮顶!
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
高分求解, 分不够再加!
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
还是不行,天啊!
mylovezcp 2004-12-22
  • 打赏
  • 举报
回复
Dim strConnection As String = "Data Source=\My Documents\Abpm.sdf"
Dim conn As SqlCeConnection = New SqlCeConnection(strConnection)

conn.Open()

Dim da As SqlCeDataAdapter = New SqlCeDataAdapter("select *from Patient ")
Dim cmd As SqlCeCommand
dim dt as new dataset

cmd = New SqlCeCommand("UPDATE Patient SET Pat_ID = @Pat_ID " & _
"WHERE Pat_ID =@Pat_ID", conn)
cmd.SqlCeParameter("@Pat_ID", SqlDbType.NChar, 20, "Pat_ID")
da.UpdateCommand = cmd

da.fill(dt)


dt.Tables("Patient").rows(DataGrid1.CurrentRowIndex).Item("Pat_ID") = "123"

Try
da.Update(dt)
Catch ex As Exception
MsgBox(ex.Source + " " + ex.Message)
End Try

conn.Close()
mylovezcp 2004-12-22
  • 打赏
  • 举报
回复
Dim strConnection As String = "Data Source=\My Documents\Abpm.sdf"
Dim conn As SqlCeConnection = New SqlCeConnection(strConnection)

conn.Open()

Dim da As SqlCeDataAdapter = New SqlCeDataAdapter("select *from Patient ")
Dim cmd As SqlCeCommand
dim dt as new dataset

cmd = New SqlCeCommand("UPDATE Patient SET Pat_ID = @Pat_ID " & _
"WHERE Pat_ID =@Pat_ID", conn)
cmd.SqlCeParameter("@Pat_ID", SqlDbType.NChar, 20, "Pat_ID")
da.UpdateCommand = cmd

da.fill(dt)


dt.Tables("Patient").rows(DataGrid1.CurrentRowIndex).Item("Pat_ID") = "123"

Try
SqlDataAdapter1.Update(DataSet11)
Catch ex As Exception
MsgBox(ex.Source + " " + ex.Message)
End Try

conn.Close()

xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
Dim da As SqlCeDataAdapter = New SqlCeDataAdapter
Dim cmd As SqlCeCommand

Dim strConnection As String = "Data Source=\My Documents\Abpm.sdf"
Dim conn As SqlCeConnection = New SqlCeConnection(strConnection)

conn.Open()

' Create the UpdateCommand.


cmd = New SqlCeCommand("UPDATE Patient SET Pat_ID = @Pat_ID " & _
"WHERE Pat_ID = '0123'", conn)

Dim parm As New SqlCeParameter("@Pat_ID", SqlDbType.NChar, 20, "Pat_ID")
parm.Value = "888"
parm.SourceVersion = DataRowVersion.Original
cmd.Parameters.Add(parm)


cmd.ExecuteNonQuery()

conn.Close()

End Sub

还是一样不行, 不是说这种错误:
一个托管的ArgumentException发生在Application::Run+0xf

Application::Run+0xf
Form1::Main+0xd

"确定"将终止

就是说这种:
一个托管的SqlCeException发生在Application::Run+0xf

Application::Run+0xf
Form1::Main+0xd

"确定"将终止
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
按照你说的,我把代码改成这样, 数据表Patient中主键是 Pat_ID 字段.

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim da As SqlCeDataAdapter = New SqlCeDataAdapter
Dim cmd As SqlCeCommand
Dim parm As SqlCeParameter

Dim strConnection As String = "Data Source=\My Documents\Abpm.sdf"
Dim conn As SqlCeConnection = New SqlCeConnection(strConnection)

cmd = New SqlCeCommand("UPDATE Patient SET Pat_ID = @Pat_ID " & _
"WHERE Pat_ID = @oldpatID", conn)

cmd.Parameters.Add("@Pat_ID", SqlDbType.NChar, 20, "Pat_ID")

parm = cmd.Parameters.Add("@oldpatID", SqlDbType.NChar, 20, "Pat_ID")
parm.SourceVersion = DataRowVersion.Original

da.UpdateCommand = cmd

写到这,下面应该怎么写, 比如说我要把Pat_ID 字段值为'123'的记录修改为'456',要怎么写?
怎么把@Pat_ID 赋值为'456', @oldpatID赋值为为'123' ?
最后如何执行这SQL语句?
mylovezcp 2004-12-22
  • 打赏
  • 举报
回复
代码参考
Public Shared Function CreateCustomerAdapter(conn As SqlConnection) As SqlDataAdapter

Dim da As SqlDataAdapter = New SqlDataAdapter()
Dim cmd As SqlCommand
Dim parm As SqlParameter

' Create the SelectCommand.

cmd = New SqlCommand("SELECT * FROM Customers " & _
"WHERE Country = @Country AND City = @City", conn)

cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15)
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15)

da.SelectCommand = cmd

' Create the UpdateCommand.

cmd = New SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " & _
"WHERE CustomerID = @oldCustomerID", conn)

cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID")
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName")

parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID")
parm.SourceVersion = DataRowVersion.Original

da.UpdateCommand = cmd

Return da
End Function
mylovezcp 2004-12-22
  • 打赏
  • 举报
回复
定义这个Dim sqlDA As SqlCeDataAdapter后,需要定义它的insertcommand,deletecommand,updatecommand和selectcommand四个对象,需要注意的是,必须要定义主键作为你更新的参数。
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
大家可以在上面的代码中看到Paraset这个数据表, 我现在的目的就是修改这个表中某个字段或某几个字段的值, 可是我发现修改完了用sqlDA.Update(sqlDS, "Paraset") 语句就出错, 一运行到这句就出错, 可是不用这句, 修改的数据又没法重新写回到 Paraset表中.
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
应该不是主键的事,我试了,用一个设置了主键的数据表来试还是同样的问题.
我是用代码由PPC自己生成数据库,建库的代码如下:

Sub createAbpmDB()
' if database does not exist, create one
If Not File.Exists("\My Documents\Abpm.sdf") Then
Dim connStr As String = "Data Source = \My Documents\Abpm.sdf"

Dim engine As New SqlCeEngine(connStr)
engine.CreateDatabase()
engine.Dispose()


Dim conn As SqlCeConnection = Nothing

Try
conn = New SqlCeConnection(connStr)
conn.Open()

Dim cmd As SqlCeCommand = conn.CreateCommand()
cmd.CommandText = "CREATE TABLE Patient(Pat_ID nvarchar(20) Primary Key NOT NULL, Case_Num nvarchar(20)," _
& " Department nvarchar(20), RoomNum nvarchar(10), Bed nvarchar(10), Name nvarchar(20), Sex nvarchar(6), Birthday datetime, Age int," _
& " Height int, Weight int, Med_Name nvarchar(20), Smoke nvarchar(6), State nvarchar(20)," _
& " City nvarchar(20), Zip nvarchar(10), Address nvarchar(40), Diagnosis nvarchar(200)," _
& " Phone nvarchar(30), HandPhone nvarchar(30), Email nvarchar(40), Medication1 nvarchar(20)," _
& " Medication2 nvarchar(20), Medication3 nvarchar(20), Medication4 nvarchar(20)," _
& " Medication5 nvarchar(20), Medication6 nvarchar(20), Medication7 nvarchar(20)," _
& " RefSys int, RefDia int, RefDate datetime, Other nvarchar(30) )"
cmd.ExecuteNonQuery()

cmd.CommandText = "CREATE TABLE Dataset(Counter int, Pat_ID nvarchar(20),Orders int, StartDate datetime, DayStartTime datetime, DayInterval int,NightStaTim datetime, NightInterv int, TotalCount int, ErrorCount int,Remark nvarchar(20) )"
cmd.ExecuteNonQuery()

cmd.CommandText = "CREATE TABLE Measure(Pat_ID nvarchar(20), Counter int, MeasureNo int, Sys int, Sys_kpa Float," _
& " Dia int, Dia_kpa Float, Map int, Map_kpa Float, Hr int, Date datetime," _
& " Time datetime, Status nvarchar(2), Comment nvarchar(20) )"
cmd.ExecuteNonQuery()

cmd.CommandText = "CREATE TABLE Paraset(SysHigh int, SysLow int, DiaHigh int, DiaLow int, NormSysDay int, NormSysNight int, " _
& " NormDiaDay int, NormDiaNight int, DayStart datetime, DayEnd datetime, " _
& " NightStart datetime, NightEnd datetime, HospitalName nvarchar(40), Header nvarchar(40),Footer nvarchar(40) )"
cmd.ExecuteNonQuery()


' cmd.CommandText = "CREATE TABLE Para(SysHigh int, SysLow int, DiaHigh int, DiaLow int, NormSysDay int, NormSysNight int, " _
' & " NormDiaDay int, NormDiaNight int, DayStart datetime, DayEnd datetime, " _
' & " NightStart datetime, NightEnd datetime, HospitalName nvarchar(40), Header nvarchar(40),Footer nvarchar(40) )"
'cmd.ExecuteNonQuery()


cmd.CommandText = "CREATE TABLE Tempmeas(Pat_ID nvarchar(20), Counter int, StartDate datetime, TotalCount int, ErrorCount int)"
cmd.ExecuteNonQuery()


cmd.CommandText = "CREATE TABLE Temp_data1(Pat_ID nvarchar(20), Counter int, MeasureNo int, Sys int, Sys_kpa Float," _
& " Dia int, Dia_kpa Float, Map int, Map_kpa Float, Hr int, Date datetime," _
& " Time datetime, Status nvarchar(2), Comment nvarchar(20) )"
cmd.ExecuteNonQuery()

cmd.CommandText = "CREATE TABLE Temp_data2(Pat_ID nvarchar(20), Counter int, MeasureNo int, Sys int, Sys_kpa Float," _
& " Dia int, Dia_kpa Float, Map int, Map_kpa Float, Hr int, Date datetime," _
& " Time datetime, Status nvarchar(2), Comment nvarchar(20) )"
cmd.ExecuteNonQuery()

cmd.CommandText = "CREATE TABLE Deleted(Pat_ID nvarchar(20), Counter int, MeasureNo int, Sys int, Sys_kpa Float," _
& " Dia int, Dia_kpa Float, Map int, Map_kpa Float, Hr int, Date datetime," _
& " Time datetime, Status nvarchar(2), Comment nvarchar(20) )"
cmd.ExecuteNonQuery()

cmd.CommandText = "CREATE TABLE Temp(Pat_ID nvarchar(20), Counter int, MeasureNo int, Sys int, Sys_kpa Float," _
& " Dia int, Dia_kpa Float, Map int, Map_kpa Float, Hr int, Date datetime," _
& " Time datetime, Status nvarchar(2), Comment nvarchar(20) )"
cmd.ExecuteNonQuery()
Catch
Finally
conn.Close()
End Try

End If
End Sub
mylovezcp 2004-12-22
  • 打赏
  • 举报
回复
如果你的数据库是在PC机上,使用RDA或者合并复制的方式建立表的话,在SQL SERVER的企业管理器中对表进行操作,建立主键,如果在POCKET PC上创建,使用DDL,如:
create table 表名
(
字段1 numeric(15) not null,
字段2 varchar(20) not null,
constraint PK_SSXX primary key (字段1)
)
go
xiaoyupzy 2004-12-22
  • 打赏
  • 举报
回复
错误信息是:

一个托管的ArgumentException发生在Application::Run+0xf

Application::Run+0xf
Form1::Main+0xd

"确定"将终止
bitsbird 2004-12-22
  • 打赏
  • 举报
回复
把错误贴出来
打开链接下载源码: https://pan.quark.cn/s/8ec3d104bde6 华为MA5671是一款针对宽带接入需求而研发的智能型光猫设备,其核心应用场景为家庭用户及小型企业环境。该设备运用了千兆以太网技术,能够提供卓越的网络连接性能,从而使用户可以体验到稳定流畅的互联网服务。其完整名称为SmartAX MA5671,其中"SmartAX"是华为对其智能接入产品系列的特定命名,意指该设备具备智能化管理功能与自动化配置特性。固件,即Firmware,是指存储于硬件设备内部的一套程序代码,负责控制设备的各项功能运作并合理调配硬件资源。在华为MA5671设备中,固件发挥着核心作用,它直接影响着设备的操作系统运行机制、网络协议兼容性、安全防护机制以及性能表现等多个维度。"MA5671V8R313C00SPC100"作为该固件的标识编号,通过此代码可以解析出以下几个关键层面的信息: 1. **V8**:这通常象征固件的主版本号,或许表明这是第8代产品形态或第8次主要升级迭代。 2. **R313**:这可能代表固件的次级版本或修订层级,暗示着相较于V8版本,该版本经历了313次的迭代优化。 3. **C00**:这部分或许与设备的特定型号设定或地域适配性相关,不同的C00编码可能对应不同的功能模块配置或区域适应性调整。 4. **SPC100**:最后的这一段编码可能标识着特殊版本或性能增强配置,SPC(Special Performance Configuration)可能是华为针对特定性能优化版本设定的代号,而100可能代表这种优化措施的等级或序列编号。 在实际部署过程中,将固件保持为最新版本是非常重要的,这样做能够有效修正已知的安全隐患,优化设备运作效能,...

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧