2017-02-08 2 views
-1

Здравствуйте, я получил ошибку:Ошибка «Токен Неизвестное» в 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

Вы забыли установить CommandType для IDbCommand cmd, а также я изменил имя параметризованной переменной.

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(); появится ошибка. –

Смежные вопросы