2012-07-05 79 views
0

我有一个excel表。我在该Excel表格的特定单元格中编写查询,然后通过我的C#代码调用该查询。我已宣布该单元格为strParam1。所以,strParam1包含我在我的Excel表格中输入的任何查询。代码如下: -从excel表读取时出现无效字符异常

public void UpdateDatabase(String strParam1, int row) 
     { 
      System.Data.OracleClient.OracleConnection conn = new System.Data.OracleClient.OracleConnection(); 
      conn.ConnectionString = "Data Source=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.5.144)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = orcl)));UID=mwm;PWD=mwm"; 
      try 
      { 
       conn.Open(); 
       OracleCommand command = conn.CreateCommand(); 
       command.CommandText = strParam1.Trim(); 
       OracleDataReader reader = command.ExecuteReader(); 
       command.Dispose(); 
      } 
      catch (Exception ex) 
      { 
       ExcelRecorder(ex.Message, row); 
      } 
      finally 
      { 
       conn.Close(); 
      } 
     } 

当达到ExecuteReader时,它会引发异常“Invalid character”found。在Excel表格中,我从\“Task \”中键入了Select *; 由于Task是一个oracle关键字,因此我重构了上述查询。但是,该查询未执行。如果我输入下面的代码并运行它,一切都很好。

command.CommandText = "Select * from \"Task\""; 

出了什么问题?我有什么特别的格式吗?从excel表单读取没有问题。我彻底地测试了它。所以,这与我的例外无关。

+0

C#中的'\“是'''的转义符,excel中的文本可能只包含原始文本'select * from”任务“' –

+0

@ Me.Name不需要分号? – user1501034

+0

仅当您的查询本身需要它时(例如,在附加多个sql语句时)。纯粹是为了Excel到C#部分,它可以被排除在外。 –

回答

1

当您从Excel单元格中读取字符串并将其放入带有引号的字符串变量中时,您不需要添加\以进行转义。
为了证明它,只需在UpdateDatabase方法上放置一个断点并查看strParam1变量。
你可以看到它包含引号,而当你直接分配给command.CommandText时,你需要转义字符串。

相关问题