簡體   English   中英

關鍵字“ INTO”附近的語法不正確

[英]Incorrect syntax near the keyword “INTO”

這是導致錯誤的insert查詢:

 public int Insert(User obj){

     string query = "INSERT IGNORE INTO tblUser(Name,Photo,Email,Password,Branch,Phone,Address,Authority,Recover_Email,Facebook_ID)  values(@name,@photo,@email,@pass,@branch,@phone,@addr,@auth,@re,@fbID) ";
     List<SqlParameter> lstp = new List<SqlParameter>();
     lstp.Add(new SqlParameter("@name", obj.Name));
     lstp.Add(new SqlParameter("@photo", obj.Photo));
     lstp.Add(new SqlParameter("@email", obj.Email));
     lstp.Add(new SqlParameter("@pass", obj.Password));
     lstp.Add(new SqlParameter("@branch", obj.Branch));
     lstp.Add(new SqlParameter("@phone", obj.Phone));
     lstp.Add(new SqlParameter("@addr", obj.Address));
     lstp.Add(new SqlParameter("@auth", obj.Authority));
     lstp.Add(new SqlParameter("@re", obj.Recovery_Email));
     lstp.Add(new SqlParameter("@fbID", obj.Facebook_ID));
     return DBUtility.ModifyData(query, lstp);
}

異常詳細信息:

System.Data.SqlClient.SqlException:關鍵字“ INTO”附近的語法不正確

表定義:

CREATE TABLE [dbo].[tblUser] (
    [UserID]         INT           IDENTITY (1, 1) NOT NULL,
    [Name]           VARCHAR (100) NULL,
    [Photo]          VARCHAR (500) NULL,
    [Email]          VARCHAR (50)  NULL,
    [Password]       VARCHAR (500) NULL,
    [Branch]         VARCHAR (50)  NULL,
    [Phone]          VARCHAR (50)  NULL,
    [Address]        VARCHAR (500) NULL,
    [Recovery_Email] VARCHAR (100) NULL,
    [Facebook_ID]    VARCHAR (200) NULL,
    PRIMARY KEY CLUSTERED ([UserID] ASC)
);

如果需要的話, 堆棧跟蹤:

 [SqlException (0x80131904): Incorrect syntax near the keyword 'INTO'.]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1787814
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5341674
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +546
   System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1693
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +275
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +1421
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +177
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +208
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +163
   DataAccess.DBUtility.ModifyData(String query, List`1 lstParams) in c:\Users\ABHISHEK\Documents\Visual Studio 2013\Projects\InventoryManagement\DataAccess\DBUtility.cs:36
   BusinessLogic.UserLogic.Insert(User obj) in c:\Users\ABHISHEK\Documents\Visual Studio 2013\Projects\InventoryManagement\BusinessLogic\UserLogic.cs:30
   InventoryManagementSys.FacebookSync.AuthorizeUser() in c:\Users\ABHISHEK\Documents\Visual Studio 2013\Projects\InventoryManagement\InventoryManagementSys\FacebookSync.aspx.cs:83
   InventoryManagementSys.FacebookSync.Page_Load(Object sender, EventArgs e) in c:\Users\ABHISHEK\Documents\Visual Studio 2013\Projects\InventoryManagement\InventoryManagementSys\FacebookSync.aspx.cs:20
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

AFAIK,您不能在SQL SERVER使用INSERT IGNORE 如果您使用的是SQL SERVER 2008 onwards ,則可以使用MERGE (如果行不存在)進行INSERTUPDATE 例如

MERGE
INTO    tmp_final dv
USING   tmp_holding_DataValue t
ON      t.dateStamp = dv.dateStamp
        AND t.itemId = dv.itemId
WHEN NOT MATCHED THEN
INSERT  (dateStamp, itemId, value)
VALUES  (dateStamp, itemId, value)

編輯:很明顯,您正在針對SQL Server執行,因為SQL Server客戶端特定的類型和方法出現在堆棧跟蹤中。

根據對問題和答案的評論:

您已經將Microsoft的SQL Server RDBMS與Oracle的MySQL RDBMS混合在一起。

使用SQL Server時,需要使用T-SQL(Microsoft的SQL方言)。

使用MySQL時,需要使用MySQL的SQL方言。

雖然可以編寫使用這兩種代碼的通用代碼,但要復雜得多(例如,對於大多數代碼,使用某種形式的工廠層來生成正確的具體類型,您需要使用通用類型(例如DbCommand ))。

一致地使用一個RDBMS(更簡單的選擇),或者構建基礎結構(包括將自己限制為SQL方言的通用部分)以跨RDBMS工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM