Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带参数的C sql select查询字符串_C#_Sql_Query Parameters - Fatal编程技术网

C# 带参数的C sql select查询字符串

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,

我想选择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, 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我理解错误的含义。