从查询返回int值的int类型函数的返回值是什么?

时间:2014-05-09 13:54:34

标签: c#

以下是我的代码。我想'int'类型函数将返回'int'value.Query在此代码中返回一个'int'值,但在此代码中返回值是什么?我不能在这里写return get_number。那我该怎么办?

我的代码:

    public int CheckMatch(CourseSchedule courseInfo)
    {
        try
        {
            ConnectionObj.Open();
            string get_number = "SELECT count(c_t_id) FROM course_teacher_table WHERE room_number = '" + courseInfo.RoomNumber + "' and class_days = '" + courseInfo.Days + "' and class_time = '" + courseInfo.ClassTime + "'";
            CommandObj.CommandText = get_number;
            CommandObj.ExecuteNonQuery();

            return '???'  

        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (ConnectionObj != null && ConnectionObj.State == ConnectionState.Open)
            {
                ConnectionObj.Close();
            }
        }
    }

2 个答案:

答案 0 :(得分:6)

而不是CommandObj.ExecuteNonQuery();,您可以这样做:

return Convert.ToInt32(CommandObj.ExecuteScalar());

您应该仅在更新或插入语句时使用ExecuteNonQuery()。对于返回单个结果的查询,您可以调用返回ExecuteScalar()的{​​{1}},您可以转换为object

旁注。我没有看到你对参数进行总结。别这样做。否则,它很容易进行sql注入。

您必须使用参数化查询。

答案 1 :(得分:2)

除了从查询中获取数字之外,该代码还存在几个重要问题。下面的代码纠正了大部分内容:

public int CheckMatch(CourseSchedule courseInfo)
{
     string get_number = 
          "SELECT count(c_t_id) " +
          " FROM course_teacher_table" +
          " WHERE room_number = @Room AND class_days = @Days AND class_time = @Time";

    //.Net works best when you create a brand new connection object for most queries
    using (var cn As New SqlConnection("connection string here"))
    using (var cmd As New SqlCommand(get_number, cn))
    {
        //I'm guessing at sql column types here. Use the actual column types from the DB.
        cmd.Parameters.Add("@Room", SqlDbType.NVarChar, 5).Value = courseInfo.RoomNumber;
        cmd.Parameters.Add("@Days", SqlDbType.Int).Value = courseInfo.Days;
        cmd.Parameters.Add("@Time", SqlDbType.NVarChar, 20).Value = courseInfo.ClassTime;

        cn.Open();
        return Convert.ToInt32(cmd.ExecuteScalar()); 
    }
}