2017-02-08 30 views
-1

你好,我得到了錯誤:錯誤「令牌UKNOWN」在Borland的

Token unknown - line 1, char 74

當我試圖讓與SQL注入的查詢時,不帶參數我沒有任何問題,這裏是代碼:

DbProviderFactory factory= DbProviderFactories.GetFactory("Borland.Data.AdoDbxClient"); 

     IDbConnection c = factory.CreateConnection(); 
     c.ConnectionString = "DriverName=Interbase;Database=....;RoleName=RoleName;User_Name=...;Password=......;SQLDialect=1;MetaDataAssemblyLoader=Borland.Data.TDBXInterbaseMetaDataCommandFactory,Borland.Data.DbxReadOnlyMetaData,Version=11.0.5000.0,Culture=neutral,PublicKeyToken=91d62ebb5b0d1b1b;GetDriverFunc=getSQLDriverINTERBASE;LibraryName=dbxint30.dll;VendorLib=GDS32.DLL"; 
     c.Open(); 

     IDbCommand cmd = c.CreateCommand(); 
     cmd.CommandText = @"SELECT ID,NAME FROM USERS WHERE UPPER(NAME) = @NAME ORDER BY ID"; 
     cmd.Connection = c; 

     IDbDataParameter p = cmd.CreateParameter(); 
     p.ParameterName = "@NAME"; 
     p.DbType = DbType.String; 
     p.Size = 15; 
     p.Value = "test_spring"; 
     cmd.Parameters.Add(p); 

     IDataReader myreader = cmd.ExecuteReader(); 

     DataTable dt = new DataTable(); 

     int fieldCount = myreader.FieldCount; 
     for (int i = 0; i < fieldCount; i++) 
     { 
      dt.Columns.Add(myreader.GetName(i), myreader.GetFieldType(i)); 
     } 
     while (myreader.Read()) 
     { 
      object[] values = new object[fieldCount]; 
      myreader.GetValues(values); 
      DataRow dataRow = dt.Rows.Add(values); 
      // We should not AcceptChangesDuringFill to avoid multiple data row versions 
     } 

     dt.EndLoadData(); 

堆棧跟蹤:

[TAdoDbxException (0x65): Token unknown - line 1, char 4 
TERM] 
    Borland.Data.TAdoDbxProviderFactory.AdoDbxException(TDBXError DBXError) +34 
    Borland.Data.TDBXContext.Error(Int32 ErrorCode, String ErrorMessage) +66 
    Borland.Data.TDBXMethodTable.RaiseError(TDBXContext DBXContext, Int32 DBXResult, IntPtr DBXHandle, String AdditionalInfo) +288 
    Borland.Data.TDBXDynalinkCommand.CheckResult(Int32 DBXResult) +33 
    Borland.Data.TDBXDynalinkCommand.DerivedPrepare() +63 
    Borland.Data.TDBXCommand.Prepare() +66 
    Borland.Data.TDBXCommand.CommandExecuting() +54 
    Borland.Data.TDBXCommand.ExecuteQuery() +72 
    Borland.Data.TDBXMorphicCommand.ExecuteQuery() +23 
    Borland.Data.TAdoDbxCommand.ExecuteDbDataReader(CommandBehavior Behavior) +57 
    System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10 
    WebApplication1._Default.Page_Load(Object sender, EventArgs e) in C:\Users\ntaskas\Documents\Visual Studio 2008\Projects\WebApplication1\WebApplication1\Default.aspx.cs:43 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +50 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 

PLZ我要完成一個項目!任何想法??

回答

0

您忘記爲IDbCommand cmd設置CommandType,並且還更改了參數化變量的名稱。

using (DbCommand cmd = c.CreateCommand()) 
    { 
     cmd.CommandText = @"SELECT ID, NAME FROM USERS WHERE UPPER(NAME) = @name ORDER BY ID"; 
     cmd.Connection = c; 
     cmd.CommandType = CommandType.Text 

     IDbDataParameter p = cmd.CreateParameter(); 
     p.ParameterName = "@name"; 
     p.DbType = DbType.String; 
     p.Size = 15; 
     p.Value = "test_spring"; 
     cmd.Parameters.Add(p); 
    } 
+0

Thx爲您的答案,但與這些更正再次我有同樣的錯誤。 –

+0

究竟在哪一行,你遇到異常?向我發送堆棧跟蹤詳細信息。 – RRM

+0

在這一行中:IDataReader myreader = cmd.ExecuteReader();出現錯誤。 –