C# 带参数的C sql select查询字符串
我想选择artiklids匹配且id为特定int的所有行。这是我的代码:C# 带参数的C sql select查询字符串,c#,sql,query-parameters,C#,Sql,Query Parameters,我想选择artiklids匹配且id为特定int的所有行。这是我的代码: public CZaposleni ucitajZaposlenog(int idZap) { CZaposleni zap = new CZaposleni(); string queryString = "SELECT zap.ZapId, zap.SifraRadnika, zap.Ime, zap.Prezime, zap.Pol, zap.JMBG,
public CZaposleni ucitajZaposlenog(int idZap)
{
CZaposleni zap = new CZaposleni();
string queryString =
"SELECT zap.ZapId, zap.SifraRadnika, zap.Ime, zap.Prezime, zap.Pol, zap.JMBG, zap.BrKnjizice, zap.StrucnaSprema, zap.DatumRodjenja, zap.DatumRodjenja, zap.DatumZaposlenja, zap.MestoRodjenja, zap.Prebivaliste, zap.Kontakt1, zap.Kontakt2, " +
"rad.RmId, rad.Naziv, rad.Sifra " +
"FROM T_Zaposleni zap, T_RadnaMesta rad " +
"WHERE zap.ZapId = @Id AND zap.RadnoMestoId = rad.RmId;";
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = queryString;
command.Parameters.Add(new SqlParameter("@Id", idZap));
connection.Open();
command.ExecuteNonQuery();
using (SqlDataReader reader = command.ExecuteReader())
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
}
return zap;
}
我得到这个错误:
System.Data.dll中发生类型为“System.InvalidOperationException”的未处理异常
其他信息:当不存在数据时,尝试读取无效
似乎@Id从未在queryString中使用实际参数进行更改
有人能指出我吗?
谢谢。您需要使用reader。阅读可前进到下一条记录
using (SqlDataReader reader = command.ExecuteReader())
{
if(reader.Read()) //Assuming you have only one record else use loop.
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
}
此外,您不需要command.ExecuteNonQuery;,移除它 您需要使用reader.Read前进到下一条记录
using (SqlDataReader reader = command.ExecuteReader())
{
if(reader.Read()) //Assuming you have only one record else use loop.
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
}
此外,您不需要command.ExecuteNonQuery;,移除它 你错过了:
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read()) //This line
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
你错过了:
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read()) //This line
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
创建阅读器后,您需要告诉它阅读 也就是说,如果您希望从读取器返回多行—如果只返回一行,那么使用if就足够了: 此外,您不需要这一行:
command.ExecuteNonQuery();
它会导致执行查询并忽略结果。要读取数据,只需要ExecuteDataReader行在创建读卡器后,您需要告诉它读取数据 也就是说,如果您希望从读取器返回多行—如果只返回一行,那么使用if就足够了: 此外,您不需要这一行:
command.ExecuteNonQuery();
它会导致执行查询并忽略结果。要读取数据,只需要ExecuteDataReader行您错过了:
应该是这样的:
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
}
}
你错过了:
应该是这样的:
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
zap = new CZaposleni();
zap.Sifra = reader["SifraRadnika"].ToString();
zap.Ime = reader["Ime"].ToString();
zap.Prezime = reader["Prezime"].ToString();
zap.Pol = Char.Parse(reader["Pol"].ToString());
zap.JMBG = reader["JMBG"].ToString();
zap.Brknjizice = reader["BrKnjizice"].ToString();
zap.SS = reader["StrucnaSprema"].ToString();
zap.DatumR = DateTime.Parse(reader["DatumRodjenja"].ToString());
zap.DatumZ = DateTime.Parse(reader["DatumZaposlenja"].ToString());
zap.Mestorodj = reader["MestoRodjenja"].ToString();
zap.Prebivaliste = reader["Prebivaliste"].ToString();
zap.Kontakt1 = reader["Kontakt1"].ToString();
zap.Kontakt2 = reader["Kontakt2"].ToString();
zap.Radnomesto = new CRadnaMesta();
zap.Radnomesto.ID = Int32.Parse(reader["RmId"].ToString());
zap.Radnomesto.Naziv = reader["Naziv"].ToString();
}
}
}
除了下面的答案之外,您还将使用command.ExecuteOnQuery执行两次查询;然后再次使用command.ExecuteReaderNext time首次搜索您的错误消息@TimSchmelter我理解错误的含义。除了下面的答案之外,您还执行了两次查询,都是使用command.ExecuteOnQuery;然后再次使用command.ExecuteReaderNext time首次搜索您的错误消息@TimSchmelter我理解错误的含义。