ADO.Net c#0x80131904必须声明标量变量/函数

时间:2013-08-28 12:43:02

标签: c# sql ado.net

我正在尝试通过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();

你能帮助我让这个功能起作用吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

在第

  

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

字符串

  

RentalStartDateTimetext

需要

  

RentalStartDateTime

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