我希望你们能解决我遇到的一个小问题.在尝试检查datareader值是否小于指定的dateTime值并需要一些帮助时,我遇到了一些错误.
DateTime feedate = new DateTime(2013,09,01);
if (rsData["M_Start"] != DBNull.Value) & (Convert.ToDateTime(rsData["M_Start"]).ToString("yyyy/mm/dd") < feedate)
Run Code Online (Sandbox Code Playgroud)
所以上面是我所拥有的,我得到的错误是'唯一的赋值调用增量递减和新的对象表达式可以用作语句'消息.
我有点难过,因为C#对我来说还是新手,所以任何帮助都表示赞赏!
谢谢.
通常,当我用 C# 编码时,我要么采用SqlDataReader以下两种方式之一编写:
reader.Read();
if (reader.HasRows)
{
// Code here
}
reader.Close();
Run Code Online (Sandbox Code Playgroud)
或者:
while (reader.Read())
{
// Code here
}
Run Code Online (Sandbox Code Playgroud)
首先,我打开SqlDataReader并关闭它。第二个我只是reader.Read()在 while 循环中被调用。
我的问题是:reader.Read()读取所有数据后调用是否会自行关闭?或者我还应该打电话吗reader.Close()?
我需要知道如何获取SqlDataReaderC# 中使用的查询的多行和多列返回的值。通过表返回的数据:

我想在标签中显示所有这些。这是我到目前为止的代码:
try
{
SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
connection.Open();
string query = ("select cardname,cardnumber,expiry,cardballance from vwallet where username='" + uname + "'");
SqlCommand cmd = new SqlCommand(query, connection);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
//cardname = reader[0].ToString();
//cardnumber = reader[1].ToString();
//expiry = reader[2].ToString();
//cardballance = reader[3].ToString();
reader.
}
}
Run Code Online (Sandbox Code Playgroud)
注意:我想将查询返回的结果(即卡名、卡号、到期日和卡余额)显示到标签中。
我目前的理解是,我编写的代码将仅读取一行的列并分配给变量(已在代码中声明,而不是在此处粘贴声明)。
如何读取从上表返回的所有数据?
string query =
"SELECT * FROM table1, table2 WHERE table1.Id = table2.fId";
...
using(IDataReader dataReader =
db.ExecuteReader(CommandType.Text, query))
..
string value = dataReader["table2.field"]; //dies
Run Code Online (Sandbox Code Playgroud)
我目前正在编写一些.NET代码,它涉及执行连接查询,然后使用DataReader访问返回的数据.我想知道是否可以使用某种前缀表示法访问返回行中的字段(参见上面的示例),而不必使用序号位置来访问行中的值(在两个表都包含重叠字段的情况下)名)?
我有以下情况:
using (SqlConnection conexao = new SqlConnection(ConnectionString))
{
SqlCommand comando = new SqlCommand(query, conexao);
comando.Parameters.AddWithValue("id", idUsuario);
conexao.Open();
SqlDataReader reader = comando.ExecuteReader(CommandBehavior.SingleRow);
if (reader.Read())
{
Hydrate(out entity, reader);
}
}
Run Code Online (Sandbox Code Playgroud)
那么,如果reader包含有效结果HasRows == true,那么reader.Read()应该返回true,对吗?
嗯,它不适合我.我不知道发生了什么,因为Hydrate(out entity, reader);线路永远不会被击中.
有人可以帮我理解这个吗?
谢谢!
好的,这很奇怪.今晚我在为公司网站添加功能时遇到了这个问题.
我正在构建一个自定义日历控件,用于查询我们的数据库以显示公司事件.这是情况,EndDate存储了一个值,并且在开发系统上,其中一个事件具有NULL值.没什么大不了的,因为它只是一个测试系统,但在尝试使用它之前还要检查安全方面.我认为以下代码可行:
While dr.Read()
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, IIf(dr("EventEndDate") Is DBNull.Value, Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), Convert.ToDateTime(dr("EventEndDate"))) _
, Convert.ToString(dr("EventType")) _
, Convert.ToString(dr("EventDescription")) _
, Convert.ToString(dr("EventMessage")) _
})
End While
Run Code Online (Sandbox Code Playgroud)
但它没有,我仍然得到Object cannot be cast from DBNULL错误.所以我考虑过它并提出了这个成功运行的代码,虽然我不喜欢它并认为它很难看.
While dr.Read()
Dim column As Integer = 0
While column < dr.FieldCount - 1
If dr.GetName(column) = "EventEndDate" Then
Exit While
End If
column += 1
End While
corporateTable.Rows.Add(New Object() { _
Convert.ToDateTime(dr("EventBeginDate")) _
, IIf(dr.IsDBNull(column), Convert.ToDateTime(dr("EventBeginDate")).AddDays(1), dr.Item(column)) _ …Run Code Online (Sandbox Code Playgroud) 我循环浏览我的数据库以显示玩家与之关联的联赛列表.如果玩家不是任何联赛的成员,则会显示一条消息告诉他们.
这是代码
if (dReader.Read())
{
while (dReader.Read())
{
usersLeagues.Text += "<li class=\"li-myLeagues\"><a href=\"leagueDetails.aspx?leagueID=" + (dReader["leagueID"].ToString()) + "\">" + (dReader["leagueName"].ToString()) + "</a></li>";
}
}
else
{
usersLeagues.Text = "You are currently not a part of any leagues";
}
dReader.Close();
conn.Close();
Run Code Online (Sandbox Code Playgroud)
问题是数据阅读器没有显示查询中的第一个联盟.
知道为什么会这样吗?
我已经找到了一些关于Int32.Parse(),Convert.ToInt32()和Int32.TryParse()之间差异的好处link.
我想知道这三种方法之间有什么区别.GetInt32(),以及.GetInt32()方法应该是首选还是不首选.
我试图连接两列但出现问题....我的输出没有显示.
String Query = " SELECT pa_forename , pa_surname FROM [ICPS].[dbo].[parking_attendants] order by pa_forename ";
SqlConnection conDataBase = new SqlConnection(conString);
SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
SqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDataBase.ExecuteReader();
while (myReader.Read())
{
string pa_forename = myReader["pa_forename " +"," + "pa_surname"].ToString();
comboBox1.Items.Add(pa_forename);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Run Code Online (Sandbox Code Playgroud) 下面的函数旨在确定查询是否将返回任何行。在SQL中传递的是查询。如果导致错误,则函数应返回false。但是,当SQL =
SELECT TOP 1 [AU_ID]
FROM [dat].[model_80av2_v1_2941]
WHERE [AU_ID] IS NOT NULL AND convert(int, [AU_ID]) <> [AU_ID]
Run Code Online (Sandbox Code Playgroud)
由于未检测到错误,因此该函数错误地返回true。但是,在SQL Management Studio中执行相同的查询会导致错误:
消息232,级别16,状态3,行3类型int的算术溢出错误,值= -1000000000000000000000000000000000000.000000。
显然,该函数应该返回false,因为值不在int数据范围内,但错误处理未检测到错误。为什么?从其他帖子中,我的理解是SqlDataReader reader = cmd.ExecuteReader()应该导致错误。
private bool GetIfExists(string SQL, out int ErrorNumber, out bool Exists)
{
bool IsSuccess = true;
ErrorNumber = 0;
Exists = false;
try
{
using (SqlConnection cnn = new SqlConnection(_connectionString))
{
try
{
cnn.Open();
using (SqlCommand cmd = cnn.CreateCommand())
{
cmd.CommandText = SQL;
cmd.CommandTimeout = _commandTimeout;
try
{
using (SqlDataReader reader = …Run Code Online (Sandbox Code Playgroud) sqldatareader ×10
c# ×7
.net ×4
sql-server ×3
asp.net ×2
sql ×2
datareader ×1
if-statement ×1
int ×1
null ×1
string ×1
vb.net ×1