方法只返回“”

时间:2015-07-21 18:17:07

标签: c# sql parameters

我需要DateTime的返回字符串。更多此方法仅返回null 接收输入字符串,转换为DateTime,我需要将DateTime放在valor.retorna_date_time字符串变量上。

代码:

   public void Search_DATE(string param_date)
    {
        SqlDataReader objReader;
        SqlCommand objcmd = null;

        vsql = "SELECT [IDCADASTRO],[RGP],[PEIXE],[PESO],[QUANTIDADE],[DATA_REGISTRO] FROM cadastro WHERE DATA_REGISTRO LIKE @DATA_REGISTRO";

        if (this.Conectar())
        {
            try
            {
                DateTime dtParam = DateTime.Parse(param_date);

                objcmd = new SqlCommand(vsql, objCon);
                objcmd.Parameters.Add(new SqlParameter("@DATA_REGISTRO", dtParam));
                objReader = objcmd.ExecuteReader();

                if (objReader.Read())
                {

                    valor.retorna_date_time = objReader.GetString(6);

                }

            }
            catch (SqlException erro)
            {
                throw erro;
            }
            finally
            {
                this.Desconectar();
            }


        }


    }

输入参数:

DateTime myDateTime = DateTime.Now;
string DateTimesql = myDateTime.ToString("dd-MM-yyyy");

objSQL.Search_DATE(DateTimesql);

valor.retorna_date_time是一个全局字符串变量。

3 个答案:

答案 0 :(得分:3)

您的SELECT语句返回6列:

[IDCADASTRO],[RGP],[PEIXE],[PESO],[QUANTIDADE],[DATA_REGISTRO]

IDatareader的{​​{1}}方法是从0开始的,因此GetString(n)会返回第7列,而不是

将其更改为GetString(6)

答案 1 :(得分:0)

由于您似乎只需要最后一列,因此您可以将查询更改为:

"SELECT [DATA_REGISTRO] FROM cadastro WHERE DATA_REGISTRO LIKE @DATA_REGISTRO";

然后使用ExecuteScalar

阅读
objcmd = new SqlCommand(vsql, objCon);
objcmd.Parameters.AddWithValue("@DATA_REGISTRO", dtParam);
valor.retorna_date_time = objcmd.ExecuteScalar().ToString();

编辑:

ExecuteScalar() will return a null reference if the query did not return anything.

在将其转换为string并将其传递给valor.retorna_date_time之前,您应检查它是否为空。做类似的事情:

string returnValue = objcmd.ExecuteScalar() == null ?? String.Empty : objcmd.ExecuteScalar().ToString();

答案 2 :(得分:0)

如果没有看到您的表结构,我会尝试GetOrdinal

更改

valor.retorna_date_time = objReader.GetString(6)

valor.retorna_date_time = objReader.GetOrdinal("DATA_REGISTRO");