0

我正在尝试通过 SQL 连接使用一个函数,我在我的应用程序的其他任何地方都做过(只有在这里它给出了错误,而不是应用程序的其余部分)。当我搜索该错误代码的含义时,我发现的响应说当无法连接到 SQL 服务器时这是一个错误?但它没有给出解决方案。

这是我的 C# 代码

 SqlConnection connection = Database.GetConnection();

                DataTable dt = new DataTable("CRC");
                SqlCommand cmd = new SqlCommand("SELECT dbo.CalcRentalCharge(@RentalStartDateTime,@RentalEndDateTime,@CarTypeID)", connection);
            try
        {
            connection.Open();
            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add("@RentalStartDateTimetext", SqlDbType.DateTime).Value = RentalStartDateTimeBox.Text;
                cmd.Parameters.Add("@RentalEndDateTimetext", SqlDbType.DateTime).Value = RentalEndDateTimeBox.Text;
                cmd.Parameters.Add("@CarTypeIDtext", SqlDbType.Int).Value = CarTypeID.Text;

                connection.Open();
                Decimal rentalChange = (Decimal)cmd.ExecuteScalar();
                connection.Close();
                MessageBox.Show("The rental change is: " + rentalChange.ToString());

                if (dr.HasRows)
                {
                    dt.Load(dr);
                    dataGridView1.DataSource = dt;
                }
            }
            connection.Close();

你能帮我让这个 FUNCTION 工作吗?

4

2 回答 2

2

cmd.ExecuteReader()在将参数添加到命令对象之前不要使用。它给出错误,将参数添加到命令,然后 cmd.execureReader()

于 2013-08-28T12:51:23.373 回答
1

您的变量名中有复制/粘贴错误:

在行

cmd.Parameters.Add("@RentalStartDateTimetext", SqlDbType.DateTime).Value = RentalStartDateTimeBox.Text;

字符串

租赁开始日期时间文本

需要是

租赁开始日期时间

除此之外,因为它会作为您的下一个错误弹出:您打开和关闭连接是错误的。也使用 using 块进行连接,并在块开始后直接打开它。您不需要手动关闭它,使用块会为您完成。

于 2013-08-28T12:47:08.043 回答