2012-10-12 49 views
1

我有我试图运行在SQL查询这个公共数据表,但党的事情不会工作...C#SQL查询的公共数据表

public DataTable get_OrderTransaction_Master_ByOrderID(Int64 orderID) 
    { 
     cn = new SqlConnection(objCommon.IpcConnectionString); 
     cmd = new SqlCommand("select * from dbo.OrderTransaction_Master where orderID = " + orderID, cn); 
     cmd.CommandType = CommandType.Text; 
     cn.Open(); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
    } 

我得到get_OrderTransaction_Master_ByOrderID下一个红线说

Error 3 'OrderTransaction_Master.get_OrderTransaction_Master_ByOrderID(long)': not all code paths return a value C:\IPC\App_Code\OrderTransaction_Master.cs 32 22 http://localhost/ipc/ 

我到底做错了什么?

回答

6

你的方法的返回类型是DataTable,但你没有在你的方法return语句。您也执行cmd.ExecuteNonQuery(),在那里你应该做cmd.ExecuteReader()和加载DataTable

public DataTable get_OrderTransaction_Master_ByOrderID(Int64 orderID) 
{ 
    DataTable dt = new DataTable(); 
    using(var cn = new SqlConnection(objCommon.IpcConnectionString)) 
    { 
     using(var cmd = new SqlCommand(
      "select * from dbo.OrderTransaction_Master where orderID = " + orderID, cn)) 
     { 
      cmd.CommandType = CommandType.Text; 
      cn.Open(); 
      using(SqlDataReader reader = cmd.ExecuteReader()) 
      { 
       dt.Load(reader);    
       return dt; 
      } 
     } 
    } 
} 

我把SqlConnectionSqlCommandSqlDataReaderusing语句。一旦使用语句退出,这将正确处理对象(关闭连接等)。

+0

我得到了SQLReader的'错误类型或命名空间名称“SQLReader的”无法发现错误(是否缺少using指令或程序集引用?)\t C:\ IPC \ App_Code文件\ OrderTransaction_Master。 CS \t HTTP://本地主机/ IPC/ ' – user1269625

+0

我仍然得到同样的埃罗'错误\t \t 3 'OrderTransaction_Master.get_OrderTransaction_Master_ByOrderID(长)':不是所有的代码路径返回一个值\t C:\ IPC \ App_Code \ OrderTransaction_Master.cs http:// localhost/ipc/ 'from before – user1269625

0

您的返回类型是一个DataTable,但你的函数不返回任何东西。

两件事情,改变功能作废,或返回一个DataTable

-1

这种方法会帮助你没有尽头。这是我的宝贝,是一个真正的漂亮。

它会将您的SQLQuery作为参数,并返回一个DataTable对象:

public DataTable DBGetDataTable(string SQLQuery) 
{ 
    string MethodName = "public DataTable DBGetDataTable(string SQLQuery)"; 
    DataTable Result = null; 
    SqlConnection SqlConnection = null; 
    SqlCommand SqlCommand = null; 
    try 
    { 
     string DatabaseName = ""; 
     string ServerNameOrIP = ""; 
     string DatabaseUserID = ""; 
     string Password = ""; 

     string ConnectionString = "database=" + DatabaseName + ";server=" + ServerNameOrIP + ";user ID=" + DatabaseUserID + ";PWD=" + Password + ";Connection Timeout=5000"; 

     SqlConnection = new SqlConnection(ConnectionString); 

     SqlCommand = new SqlCommand(SQLQuery, SqlConnection); 

     SqlConnection.Open(); 

     SqlDataReader SqlDataReader = SqlCommand.ExecuteReader(); 

     if (SqlDataReader.HasRows) 
     { 
      DataTable Dt = new DataTable(); 

      Dt.Load(SqlDataReader); 

      Result = Dt; 

     } 

    } 
    catch (Exception ex) 
    { 
     //Common.Exception(ClassName, MethodName, ex); 
    } 
    finally 
    { 
     SqlConnection.Close(); 
     SqlConnection.Dispose(); 
     SqlConnection = null; 

     SqlCommand.Dispose(); 
     SqlCommand = null; 

    } 
    return Result; 
} 

由于数据库凭据将是我的不同,你需要为上述代码中使用以下变量提供值:

  • 串数据库名= “”;
  • string ServerNameOrIP =“”;
  • string DatabaseUserID =“”;
  • string Password =“”;

这是非常有弹性的,它清理后本身非常有效,因此是专为重型数据库的使用而设计的。

这里是它使用的例子:

StringBuilder sbSQL = new StringBuilder(); 

    sbSQL.AppendLine(" SET DATEFORMAT DMY"); 

    sbSQL.AppendLine(" SELECT"); 
    sbSQL.AppendLine("  TillPayment.TillPaymentId As Id"); 
    sbSQL.AppendLine(" , TillPayment.TransactionGuid As TransactionCode"); 
    sbSQL.AppendLine(" , TillPayment.Amount As Price"); 
    sbSQL.AppendLine(" , TillPayment.DiscountPercentage"); 
    sbSQL.AppendLine(" , TillPayment.Processed As ProcessedDate"); 
    sbSQL.AppendLine(" , PaymentType.Name As PaymentType"); 
    sbSQL.AppendLine(" , TillPayment.ItemType As Item"); 
    sbSQL.AppendLine(" , TillUser.LoginCode As Login"); 
    sbSQL.AppendLine(" , TillUser.Name As UserName"); 
    sbSQL.AppendLine(" , TillPayment.TillName As Till"); 

    sbSQL.AppendLine(" FROM"); 
    sbSQL.AppendLine(" [tblTillPayment] TillPayment"); 
    sbSQL.AppendLine(" INNER JOIN [tblPaymentType] PaymentType ON TillPayment.PaymentTypeId = PaymentType.PaymentTypeId"); 
    sbSQL.AppendLine(" INNER JOIN [tblTillUser] TillUser ON TillPayment.TillLoginCode = TillUser.LoginCode"); 

    int SelectedMonthFrom = GetMonthAsNumber(CboMonthReportMonth.SelectedItem.Text); 

    int SelectedYearFrom = int.Parse(CboMonthReportYear.SelectedItem.Text); 

    int SelectedMonthTo = SelectedMonthFrom == 12 ? 1 : SelectedMonthFrom + 1; 

    int SelectedYearTo = SelectedMonthTo == 1 ? SelectedYearFrom + 1: SelectedYearFrom; 

    sbSQL.AppendLine(" WHERE"); 
    sbSQL.AppendLine(" Processed >= '01-" + SelectedMonthFrom + "-" + SelectedYearFrom + " 00:00'"); 
    sbSQL.AppendLine(" AND Processed < '01-" + SelectedMonthTo + "-" + SelectedYearTo + " 00:00'"); 

    sbSQL.AppendLine(" AND NOT(TillUser.LoginCode = '2503' or TillUser.LoginCode = '1453')"); 

    sbSQL.AppendLine(" ORDER BY"); 
    sbSQL.AppendLine(" Till"); 
    sbSQL.AppendLine(" , Processed"); 

    DataTable DtReport = DBGetDataTable(sbSQL.ToString()); 

当然,你的SQL查询将从矿山不同。

注意,我用一个StringBuilder对象,但如果你直接是更舒适的书写为一个字符串,那么你可以做到这一点吧。

你写

我仍然得到同样的错误埃罗3 'OrderTransaction_Master.get_OrderTransaction_Master_ByOrderID(长)': 不是所有的代码路径返回一个值 C:\ IPC \ App_Code文件\ OrderTransaction_Master。CS 33 22的http://本地主机/ IPC/ 从之前

这表明thereis名为OrderTransaction get_OrderTransaction_Master_ByOrderID(长的OrderId)方法没有默认返回值

我想像中的问题的方法应该看起来像下面这样:

public OrderTransaction get_OrderTransaction_Master_ByOrderID(long OrderId) 
    { 
     string MethodName = "public OrderTransaction get_OrderTransaction_Master_ByOrderID(long OrderId)"; 
     OrderTransaction Result = null; 
     try{ 
      StringBuilder sbSQL = new StringBuilder(); 

      sbSQL.AppendLine(" SELECT"); 
      sbSQL.AppendLine(" *"); 

      sbSQL.AppendLine(" FROM"); 
      sbSQL.AppendLine(" dbo.OrderTransaction_Master"); 

      sbSQL.AppendLine(" WHERE"); 
      sbSQL.AppendLine(" OrderID = " + OrderID); 

      DataTable Dt = DBGetDataTable(sbSQL.ToString()) 

      OrderTransaction OrderTransaction = new OrderTransaction(Dt); 

      Result = OrderTransaction; 

     } 
     catch(Exception ex) 
     { 
      //Common.Exception(ClassName,MethodName,ex); 
     } 
     return Result; 
    } 

请问如果您有任何问题。