尝试在telerik编码步骤中使用Excel中的数据运行存储过程时出错

时间:2014-08-22 17:46:35

标签: c# sql-server visual-studio-2010 telerik

我正在尝试运行一个SQL Server存储过程,该过程从excel表中获取输入参数,这给我一个错误。

  

System.Data.SqlClient.SqlException(0x80131904):列名无效' CreatedDate DESC'

enter image description here

代码:

string SP = "dbEmail_Message_GetMessageListForFolder";
SqlCommand cmd = new SqlCommand(SP, conn);

cmd.CommandType = System.Data.CommandType.StoredProcedure;

string myPath = @"C:\Users\Monica\Desktop\ExcelTest.xlsx";
Excel.Application excelApp = new Excel.Application();
Excel.Workbook workbook = excelApp.Workbooks.Open(myPath);

// select the correct worksheet
Excel.Worksheet demoWorksheet = (Excel.Worksheet)excelApp.Worksheets["Sheet1"];

excelApp.Visible = false;

// select the right cell in the correct worksheet
// var value = Convert.ToString(demoWorksheet.get_Range("E2", "E2").Value2) ;
// file2.WriteLine("value=" + value);       
// file2.Close();

cmd.Parameters.Add("@strCurrentUser", SqlDbType.VarChar);
cmd.Parameters["@strCurrentUser"].Value = '"'+Convert.ToString(demoWorksheet.get_Range("A2", "A2").Value2)+'"';

cmd.Parameters.Add("@intCurrentSite", SqlDbType.Int);
cmd.Parameters["@intCurrentSite"].Value = demoWorksheet.get_Range("B2", "B2").Value2; 

cmd.Parameters.Add("@intStatus", SqlDbType.Int);
cmd.Parameters["@intStatus"].Value = demoWorksheet.get_Range("C2", "C2").Value2;

cmd.Parameters.Add("@blnSentMailOnly", SqlDbType.Int);
cmd.Parameters["@blnSentMailOnly"].Value = demoWorksheet.get_Range("D2", "D2").Value2;

cmd.Parameters.Add("@strSortBy", SqlDbType.VarChar);
cmd.Parameters["@strSortBy"].Value = demoWorksheet.get_Range("E2", "E2").Value2;

cmd.Parameters.Add("@intToSite", SqlDbType.Int);
cmd.Parameters["@intToSite"].Value = demoWorksheet.get_Range("F2", "F2").Value2;

cmd.Parameters.Add("@SubCategory", SqlDbType.VarChar);
cmd.Parameters["@SubCategory"].Value = demoWorksheet.get_Range("G2", "G2").Value2;

cmd.Parameters.Add("@intPageIndex", SqlDbType.Int);
cmd.Parameters["@intPageIndex"].Value = demoWorksheet.get_Range("H2", "H2").Value2;

cmd.Parameters.Add("@strToUserName", SqlDbType.VarChar);
cmd.Parameters["@strToUserName"].Value = '"' + Convert.ToString(demoWorksheet.get_Range("I2", "I2").Value2) + '"';

cmd.Parameters.Add("@intPageSize", SqlDbType.Int);
cmd.Parameters["@intPageSize"].Value = demoWorksheet.get_Range("J2", "J2").Value2;

cmd.Parameters.Add("@Category", SqlDbType.VarChar);
cmd.Parameters["@Category"].Value = '"' + Convert.ToString(demoWorksheet.get_Range("K2", "K2").Value2) + '"';

SqlParameter rowCount = cmd.Parameters.Add("@intTotalRecords", System.Data.SqlDbType.Int);
rowCount.Direction = System.Data.ParameterDirection.Output;

cmd.Connection = conn;
conn.Open();

SqlDataReader alertReader = cmd.ExecuteReader();
excelApp.ActiveWorkbook.Save();

excelApp.Workbooks.Close();
int count = 0;

System.IO.StreamWriter file = new System.IO.StreamWriter("C:\\Users\\Monica\\Documents\\source.txt");

if (alertReader.HasRows)
{
    while (alertReader.Read())
    {
        count = count + 1;
        file.WriteLine("DB Alert Count is:" + count);
    }

    alertReader.Close();
}

我有另一个测试脚本运行相同的存储过程,其中输入值直接在测试脚本中提供,工作正常。

SqlConnection conn = new SqlConnection(connStr);

        string SP = "dbEmail_Message_GetMessageListForFolder";
        SqlCommand cmd = new SqlCommand(SP, conn);

        cmd.CommandType = System.Data.CommandType.StoredProcedure;

        cmd.Parameters.Add("@strCurrentUser", SqlDbType.VarChar);
        cmd.Parameters["@strCurrentUser"].Value = "derek";

        cmd.Parameters.Add("@intCurrentSite", SqlDbType.Int);
        cmd.Parameters["@intCurrentSite"].Value = 19;

        cmd.Parameters.Add("@intStatus", SqlDbType.Int);
        cmd.Parameters["@intStatus"].Value = 0;

        cmd.Parameters.Add("@blnSentMailOnly", SqlDbType.Int);
        cmd.Parameters["@blnSentMailOnly"].Value = 0;

        cmd.Parameters.Add("@strSortBy", SqlDbType.VarChar);
        cmd.Parameters["@strSortBy"].Value = "CreatedDate DESC";

        cmd.Parameters.Add("@intToSite", SqlDbType.Int);
        cmd.Parameters["@intToSite"].Value = 12;

        cmd.Parameters.Add("@SubCategory", SqlDbType.VarChar);
        cmd.Parameters["@SubCategory"].Value = "RouteToPCPRequest";

        cmd.Parameters.Add("@intPageIndex", SqlDbType.Int);
        cmd.Parameters["@intPageIndex"].Value = 1;

        cmd.Parameters.Add("@strToUserName", SqlDbType.VarChar);
        cmd.Parameters["@strToUserName"].Value = "hunterjane";

        cmd.Parameters.Add("@intPageSize", SqlDbType.Int);
        cmd.Parameters["@intPageSize"].Value = 100;

        cmd.Parameters.Add("@Category", SqlDbType.VarChar);
        cmd.Parameters["@Category"].Value = "OnlineNotification";

        SqlParameter rowCount = cmd.Parameters.Add("@intTotalRecords", System.Data.SqlDbType.Int);
        rowCount.Direction = System.Data.ParameterDirection.Output;

        cmd.Connection = conn;
        conn.Open();

        SqlDataReader alertReader = cmd.ExecuteReader();

整个错误日志粘贴在下面:

失败信息: ~~~~~~~~~~~~~~~ 抛出执行编码步骤的异常:' [VerifyAlerts_CodedStep2]:验证' div的数量'等于'警报的数量'。 的InnerException: System.Data.SqlClient.SqlException(0x80131904):列名无效' CreatedDate DESC'。    在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,Boolean breakConnection,Action 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction)    在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncClose)    在System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean& dataReady)    在System.Data.SqlClient.SqlDataReader.TrySetMetaData(_SqlMetaDataSet metaData,Boolean moreInfo)    在System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean& dataReady)    在System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()    在System.Data.SqlClient.SqlDataReader.get_MetaData()    在System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)    在System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async,Int32 timeout,Task& task,Boolean asyncWrite,SqlDataReader ds)    在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String方法,TaskCompletionSource`1完成,Int32超时,任务和任务,布尔asyncWrite)    在System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method)    在System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)    在System.Data.SqlClient.SqlCommand.ExecuteReader()    at c:\ tfs \ HASINC \ Development \ QAAutomation \ Communicator \ Alerts \ Alerts_VerifyDivsCount_WithDatabase - Copy.tstest.cs:line 123中的Communicator.Alerts.Alerts_VerifyDivsCount_WithDatabase.Alerts_VerifyDivsCount_WithDatabase__Copy_CodedStep() ClientConnectionId:a4f49f47-65aa-4e0d-af2c-8791d3f2f610

有人可以告诉我哪里出错了吗?

1 个答案:

答案 0 :(得分:0)

CreatedDate DESC看起来应该在ORDER BY子句中而不是列名列表中,但是我没有看到异常来自的SQL代码..