我在我的数据库中进行了一些小的更改,并且工作代码开始被错误地添加错误:
未处理的类型' System.NotSupportedException'发生了 在Npgsql.dll中
其他信息:后端发送了无法识别的响应类型:r
我阅读了一些关于类似错误的主题,所以我打开了一个新连接(conn1)并尝试了这样,但它没有用。我有点失落,因为我不知道是什么导致它。当我尝试调试它时,错误显示在我列出的代码的最后一行。
我的代码:
private void Pocetna_forma_Load(object sender, EventArgs e)
{
txt_login_info.ReadOnly = true; //stavlja textbox za login da se ne moze editat
NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5433;User Id=postgres;" +
"Password=123;Database=postgres;");
conn.Open();
//query za broj zaposlenika
NpgsqlCommand broj_zaposlenik = new NpgsqlCommand("Select count(*) from zaposlenici ;", conn);
count_zaposlenici = Convert.ToInt32(broj_zaposlenik.ExecuteScalar());
conn.Close();
polje = new int[count_zaposlenici];
polje_brojac = new int[count_zaposlenici];
int i = 0;
//polje za evidenciju dolazaka/odlazaka
foreach (var item in polje)
{
polje_brojac[i] = 1;
polje[i] = 1;
i++;
}
}
private void btn_login_Click(object sender, EventArgs e)
{
this.Hide();
var login_form = new Login();
login_form.FormClosed += (s, ags) => this.Close();
login_form.Show();
}
private void btn_ok_Click(object sender, EventArgs e)
{
string barcode = txt_barcode.Text;
NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5433;User Id=postgres;" +
"Password=skalinada123;Database=postgres;");
conn.Open();
//query provjere za barcode, da li postoji
NpgsqlCommand barcode_provjera = new NpgsqlCommand("Select count(*) from zaposlenici where barcode=@barcode;", conn);
barcode_provjera.Parameters.AddWithValue("@barcode", barcode.ToString());
Int32 barcode_check = Convert.ToInt32(barcode_provjera.ExecuteScalar());
if (barcode_check > 0)
{
//query za dohvacanje zaposlenik_id
NpgsqlCommand id_zaposlenika = new NpgsqlCommand("Select zaposlenik_id from zaposlenici where barcode=@barcode ", conn);
id_zaposlenika.Parameters.AddWithValue("@barcode", barcode.ToString());
zaposlenik_id = Convert.ToInt32(id_zaposlenika.ExecuteScalar());//vraca id zaposlenika
string vrijeme_prijave= DateTime.Now.ToString("HH:mm:ss");
string datum = DateTime.Now.ToString("dd/MM/yyyy"); ///promjena
//query koji provjerava da li je osoba tek dosla na posao ili ce mu se pisati odlazak
NpgsqlCommand provjera_odlaska = new NpgsqlCommand("select count(*) from radni_sati where datum=@datum and dolazak is not null "+
" and zaposlenik_id=@zaposlenik_id;", conn);
provjera_odlaska.Parameters.AddWithValue("@barcode", barcode.ToString());
provjera_odlaska.Parameters.AddWithValue("@datum", datum.ToString());
provjera_odlaska.Parameters.AddWithValue("@zaposlenik_id", zaposlenik_id.ToString());
count_provjera_odlaska = Convert.ToInt32(provjera_odlaska.ExecuteScalar());
//query za dohvacanje ime i prezime zaposlenika za ispis info-a
NpgsqlCommand command = new NpgsqlCommand("Select ime,prezime from zaposlenici where barcode=@barcode;", conn);
command.Parameters.AddWithValue("@barcode", barcode.ToString());
NpgsqlDataReader dr = command.ExecuteReader();
while (dr.Read())
{
if (polje[zaposlenik_id - 1] == 1 || polje[zaposlenik_id - 1] == 3)
{
info = "Djelatnik " + dr[0].ToString() + " " + dr[1].ToString() + " je uspjesno prijavljen. Vrijeme: " + vrijeme_prijave + "\n";
txt_login_info.AppendText(info);//prikazuje tekst djelatnik....
}
else if (polje[zaposlenik_id - 1] == 2 || polje[zaposlenik_id - 1] == 4)
{
info = "Djelatnik " + dr[0].ToString() + " " + dr[1].ToString() + " je uspjesno odjavljen. Vrijeme: " + vrijeme_prijave + "\n";
txt_login_info.AppendText(info);//prikazuje tekst djelatnik....
}
dr.Close();
}
if (count_provjera_odlaska == 0)//ako nije upisan radnik na taj dan uopce
{
if (polje[zaposlenik_id - 1] == 1)
{
vrijeme_dolaska = DateTime.Now.ToString("HH:mm:ss");
vrijemeDolaska = Convert.ToDateTime(vrijeme_dolaska);
polje[zaposlenik_id - 1] = 2;
// prijavljen_odjavljen = "odjavljen";
}
NpgsqlConnection conn1 = new NpgsqlConnection("Server=127.0.0.1;Port=5433;User Id=postgres;" +
"Password=123;Database=postgres;");
conn1.Open();
//query za upis u tablicu radni_sati
NpgsqlCommand dolazak = new NpgsqlCommand("insert into radni_sati values(default,@datum," +
"(select distinct odjel_id from zaposlenici where barcode=@barcode)," +
"(select odjel from zaposlenici where barcode=@barcode)," +
"(select zaposlenik_id from zaposlenici where barcode=@barcode)," +
"(select ime from zaposlenici where barcode=@barcode)," +
"(select prezime from zaposlenici where barcode=@barcode)," +
"@dolazak,null,null," +
"(select bolovanje from zaposlenici where barcode=@barcode)," +
"(select godisnji from zaposlenici where barcode=@barcode)," +
"(select slobodni_dani from zaposlenici where barcode=@barcode)," + "(select slobodni_dani from zaposlenici where barcode=@barcode)," +
"null, null,null)", conn1);
dolazak.Parameters.AddWithValue("@datum", datum.ToString());
dolazak.Parameters.AddWithValue("@barcode", barcode.ToString());
dolazak.Parameters.AddWithValue("@dolazak", vrijemeDolaska.ToString());
//dolazak.Parameters.AddWithValue("@odlazak", vrijeme_odlaska.ToString());
NpgsqlDataReader dr1 = dolazak.ExecuteReader();//inserta dolazak
dr1.Close();
所以它的作用是扫描员工的条形码,当他到达/回家时,它会保存,他工作多少等......当我只扫描一个用户,但是当我尝试扫描一个用户时,一切正常第二个,弹出这个错误。
如果我在调试模式下启动我的程序,并标记该行,第一次来到它,它会显示我说的错误,但如果我"继续"我得到的更多:
未处理的类型' System.NotSupportedException'发生在pgsql.dll
附加信息:如果底层流不可搜索,则读缓冲区不为空时,无法写入BufferedStream。确保此BufferedStream下面的流可以寻找或避免在此BufferedStream上交错读写操作。