我需要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是一个全局字符串变量。
答案 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");