0

任何人都可以帮助我在尝试注册用户时遇到错误,在本地一切正常,但是当我远程上传文件时遇到错误。这是我的代码

    Dim conn As OleDbConnection
    Dim strinsert As String
    Dim cmdinsert As OleDbCommand

    conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|sabersolutions.mdb")
    strinsert = "INSERT INTO register(Name,Email,Passwords,Newsletter,ReportTemplates,ReturningMember,Sponsor)SELECT TOP 1 @Name,@Email,@Passwords,@Newsletter,@ReportTemplates,@ReturningMember,@Sponsor FROM register WHERE NOT EXISTS(SELECT 1 FROM register WHERE Name=@Name AND Email=@Email AND Passwords=@Passwords AND Newsletter=@Newsletter AND ReportTemplates=@ReportTemplates AND ReturningMember=@ReturningMember AND Sponsor=@Sponsor)"

    cmdinsert = New OleDbCommand(strinsert, conn)
    cmdinsert.Parameters.Add("@Name", OleDbType.VarWChar, 255).Value = txtName.Text
    cmdinsert.Parameters.Add("@Email", OleDbType.VarWChar, 255).Value = txtEmail.Text
    cmdinsert.Parameters.Add("@Passwords", OleDbType.VarWChar, 255).Value = txtPass.Text
    cmdinsert.Parameters.Add("@Sponsor", OleDbType.Boolean, 1).Value = ckSponsor.Checked
    cmdinsert.Parameters.Add("@Newsletter", OleDbType.Boolean, 1).Value = ckNews.Checked
    cmdinsert.Parameters.Add("@ReportTemplates", OleDbType.Boolean, 1).Value = ckReportTemp.Checked
    cmdinsert.Parameters.Add("@ReturningMember", OleDbType.Boolean, 1).Value = ckRSponsor.Checked
    cmdinsert.Parameters.Add("@Sponsor", OleDbType.Boolean, 1).Value = ckSponsor.Checked

    cmdinsert.Connection.Open()

    cmdinsert.ExecuteNonQuery()

    cmdinsert.Connection.Close()

    LblSuccess.Text = "You have successfully Register, Please Login to view our Online Booking Sytem."

我得到的错误

Server Error in '/' Application.

Operation must use an updateable query.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.OleDb.OleDbException: Operation must use an updateable query.

Source Error: 


Line 27:         cmdinsert.Connection.Open()
Line 28: 
Line 29:         cmdinsert.ExecuteNonQuery()
Line 30: 
Line 31:         cmdinsert.Connection.Close()

Source File: C:\inetpub\vhosts\sabersolutions.co.za\httpdocs\RegisterandLoginForm.aspx.vb    Line: 29 

堆栈跟踪:

   [OleDbException (0x80004005): Operation must use an updateable query.]
   System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1081356
   System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +247
   System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +194
   System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +58
   System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +167
   System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +113
   RegisterandLoginForm.Button2_Click(Object sender, EventArgs e) in C:\inetpub\vhosts\sabersolutions.co.za\httpdocs\RegisterandLoginForm.aspx.vb:29
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.272

4

1 回答 1

0

我远不是 Access 的新手,但您的查询中有错误;

....
SELECT TOP 1 @Name,@Email,@Passwords,@Newsletter,
             @ReportTemplates,@ReturningMember,@Sponsor 
FROM register 
...

应该是;

....
SELECT TOP 1 Name,Email,Passwords,Newsletter,
             ReportTemplates,ReturningMember,Sponsor 
FROM register 
...

尽管您的“可更新查询”问题很可能是您尝试UPDATE在 Access 上使用 SQL 服务器查询,但 Access 的UPDATE语法远非标准,可能需要将子查询重写为连接。拥有更多 Access-Foo 的人可能会为您提供帮助。

或者,您可以尝试使用 Access Query Wizard,它可以帮助您使用正确的 Access 语法重写查询。

于 2013-03-03T18:33:46.453 回答