需要帮忙; C#从Object返回System.dataTable

时间:2016-01-29 02:42:58

标签: c# tsql

我试图创建一个可以通过Parser方法调用的类。基本上我需要从SQL数据列中检索值;我的查询只抓取一列,然后将该值作为System.DataTable中的一行返回,供我的CSVshredder使用。这是我到目前为止所得到的但是我一直得到这个错误" shredderAction.Transporter.MsgDataTable()&#39 ;:并非所有代码路径都返回一个值" ;我错过了什么?

public class Transporter
{
    public static DataTable MsgDataTable()
    {
        DataTable table1 = new DataTable("Persons");
        DataRow tableRow;
        tableRow = table1.NewRow();

        SqlConnection sqlConnection1 = new SqlConnection("Sanitised for security");
        SqlCommand cmd = new SqlCommand();

        cmd.CommandText = "SELECT TOP 1 CAST(cast(msgdata as varbinary(max)) as varchar(MAX)) FROM [Sanitised].[dbo].[MSGQUEUE]";
        cmd.CommandType = CommandType.Text;
        cmd.Connection = sqlConnection1;
        object value = cmd.ExecuteScalar();

        sqlConnection1.Open();
        table1.Rows.Add(value);
        sqlConnection1.Close();
    }
}

1 个答案:

答案 0 :(得分:2)

您的方法需要返回,请查看其签名:

public static DataTable MsgDataTable() //DataTable is a return type

因此,您必须返回DataTable类型以使其在语法上正确。

在最后一行中,返回您创建的DataTable

sqlConnection1.Open();
table1.Rows.Add(value);
sqlConnection1.Close();
return table1; // add this

错误应该消失了。

只有当某个函数具有返回void的签名时,其块中才能有return

private void thisMethodRequiresNoReturn(){ //void requires no return
    //do something without return
}

否则,如果它有一个返回,那么在方法块中,你必须返回与所有可能的路径

中的该签名匹配的类型
private int thisMethodRequiresIntReturn(){ //void requires int return
    //do something without return - error
}

private int thisMethodRequiresIntReturn(){ //void requires int return
    int val = 0;
    return val; //this is ok
}

private int thisMethodRequiresIntReturn(){ //void requires int return
    int val = 0; 
    if (val > 0)
        return val; //this is not ok, not all path returning int
}

private int thisMethodRequiresIntReturn(){ //void requires int return
    int val = 0; 
    if (val > 0)
        return val; 
    return -1; //this is ok, all paths returning int
}