/ / C # - Nie ma wiersza na pozycji 0 [duplikat] - c #, sql-server, asp.net-mvc

C # - Nie ma wiersza w pozycji 0 [duplikat] - c #, serwer sql, asp.net-mvc

Chciałbym zapisać wynik mojej prośby wlista ciągów znaków (Lista) i chciałbym ją zapisać w słowniku (Słowniku), ale bez względu na to, którego żądania używam, pojawia się komunikat o błędzie: „Nie ma wiersza na pozycji 0”.

public Dictionary<string, object> getPICv2(string Tdate_d, string Ddl_fampic, string Ddl_donnee, string Ddl_detail, string Ddl_caracteristique, string Ddl_poste, string Ddl_ilot, string Ddl_nposte, string Ddl_atelier, string Ddl_tposte)
{
Dictionary<string, object> list = new Dictionary<string, object>();

SqlDataAdapter dac, dad, dam;
DataSet dsm = new DataSet();
DataSet dsp = new DataSet();
DataSet dsd = new DataSet();
DataSet dsc = new DataSet();
DataSet dsb = new DataSet();
DataTable dtm = new DataTable();
DataTable dtc = new DataTable();
DataTable dtv = new DataTable();
DataTable dts = new DataTable();
DataTable dtp2 = new DataTable();
DataTable dtp3 = new DataTable();


SqlConnection cn, cn1;
SqlCommand cmd1;
string sql = "", test = "";

cn = new SqlConnection(CS_PMI);
cn.Open();

cn1 = new SqlConnection(CS_DW);
cn1.Open();
sql = "";


// entête

// lecture des mois sur la période

sql = "SELECT year(CAKJDATE),convert(varchar,DateName( month , DateAdd( month , month(CAKJDATE) , -1 ))),"01/"+substring(CAKJDATE,5,2)+"/"+substring(CAKJDATE,1,4),COUNT(*)  ";
sql = sql + "FROM [PMI].[dbo].[CALEND] ";
sql = sql + "where CAKTSOC="100" and CAKTTYPE="01" and CAKTCODE="" and CACTACTIF="O" ";
sql = sql + "and cast(CAKJDATE as datetime)>=convert(varchar,"" + Tdate_d + "",103) and cast(CAKJDATE as datetime)< convert(varchar,cast("" + Tdate_d + "" as datetime)+390,103) ";
sql = sql + "group by convert(varchar,DateName( month , DateAdd( month , month([CAKJDATE]) , -1 ))),month([CAKJDATE]),year([CAKJDATE]),"01/"+substring(CAKJDATE,5,2)+"/"+substring(CAKJDATE,1,4) ";
sql = sql + "order by year([CAKJDATE]),month([CAKJDATE]); ";


try
{
dam = new SqlDataAdapter(sql, cn);
dsm = new DataSet();
dam.Fill(dsm, "lstmois");
dtm = dsm.Tables["lstmois"];

//Lblerreur.Text = dtm.Rows[1][2].ToString();
}
catch (SqlException e)
{

cn.Close();
cn1.Close();
}

// construction ligne entete du tableau
sql = "(SELECT "Périodes" as entite,"" + dtm.Rows[0][0].ToString() + "<br>" + dtm.Rows[0][1].ToString() + "" as M01,"" + dtm.Rows[1][0].ToString() + "<br>" + dtm.Rows[1][1].ToString() + "" as M02,"" + dtm.Rows[2][0].ToString() + "<br>" + dtm.Rows[2][1].ToString() + "" as M03,"" + dtm.Rows[3][0].ToString() + "<br>" + dtm.Rows[3][1].ToString() + "" as M04,"" + dtm.Rows[4][0].ToString() + "<br>" + dtm.Rows[4][1].ToString() + "" as M05,"" + dtm.Rows[5][0].ToString() + "<br>" + dtm.Rows[5][1].ToString() + "" as M06,"" + dtm.Rows[6][0].ToString() + "<br>" + dtm.Rows[6][1].ToString() + "" as M07,"" + dtm.Rows[7][0].ToString() + "<br>" + dtm.Rows[7][1].ToString() + "" as M08,"" + dtm.Rows[8][0].ToString() + "<br>" + dtm.Rows[8][1].ToString() + "" as M09,"" + dtm.Rows[9][0].ToString() + "<br>" + dtm.Rows[9][1].ToString() + "" as M10,"" + dtm.Rows[10][0].ToString() + "<br>" + dtm.Rows[10][1].ToString() + "" as M11,"" + dtm.Rows[11][0].ToString() + "<br>" + dtm.Rows[11][1].ToString() + "" as M12,"Total" as TT) ";

try
{
dad = new SqlDataAdapter(sql, cn);
//dsm = new DataSet();
dad.Fill(dsm, "entete");

List<string> ListEntete = new List<string>();

for (int i = 0; i <= 13; i++)
{
ListEntete.Add(dsm.Tables["entete"].Rows[0][i].ToString());
}

list.Add("entete", ListEntete);
}
catch (SqlException e)
{

cn.Close();
cn1.Close();
}

Jednak wszystkie moje zapytania są poprawne, ponieważ używam ich w innym projekcie.

Z góry dziękuję za pomoc

Odpowiedzi:

1 dla odpowiedzi № 1

Jest to pełny kod:

public Dictionary<string, object> getPICv2(string Tdate_d, string Ddl_fampic, string Ddl_donnee, string Ddl_detail, string Ddl_caracteristique, string Ddl_poste, string Ddl_ilot, string Ddl_nposte, string Ddl_atelier, string Ddl_tposte)
{
Dictionary<string, object> list = new Dictionary<string, object>();

SqlDataAdapter dac, dad, dam;
DataSet dsm = new DataSet();
DataSet dsp = new DataSet();
DataSet dsd = new DataSet();
DataSet dsc = new DataSet();
DataSet dsb = new DataSet();
DataTable dtm = new DataTable();
DataTable dtc = new DataTable();
DataTable dtv = new DataTable();
DataTable dts = new DataTable();
DataTable dtp2 = new DataTable();
DataTable dtp3 = new DataTable();


SqlConnection cn, cn1;
SqlCommand cmd1;
string sql = "", test = "";

cn = new SqlConnection(CS_PMI);
cn.Open();

cn1 = new SqlConnection(CS_DW);
cn1.Open();
sql = "";


// entête

// lecture des mois sur la période

sql = "SELECT year(CAKJDATE),convert(varchar,DateName( month , DateAdd( month , month(CAKJDATE) , -1 ))),"01/"+substring(CAKJDATE,5,2)+"/"+substring(CAKJDATE,1,4),COUNT(*)  ";
sql = sql + "FROM [PMI].[dbo].[CALEND] ";
sql = sql + "where CAKTSOC="100" and CAKTTYPE="01" and CAKTCODE="" and CACTACTIF="O" ";
sql = sql + "and cast(CAKJDATE as datetime)>=convert(varchar,"" + Tdate_d + "",103) and cast(CAKJDATE as datetime)< convert(varchar,cast("" + Tdate_d + "" as datetime)+390,103) ";
sql = sql + "group by convert(varchar,DateName( month , DateAdd( month , month([CAKJDATE]) , -1 ))),month([CAKJDATE]),year([CAKJDATE]),"01/"+substring(CAKJDATE,5,2)+"/"+substring(CAKJDATE,1,4) ";
sql = sql + "order by year([CAKJDATE]),month([CAKJDATE]); ";


try
{
dam = new SqlDataAdapter(sql, cn);
dsm = new DataSet();
dam.Fill(dsm, "lstmois");
dtm = dsm.Tables["lstmois"];

//Lblerreur.Text = dtm.Rows[1][2].ToString();
}
catch (SqlException e)
{

cn.Close();
cn1.Close();
}

// construction ligne entete du tableau
sql = "(SELECT "Périodes" as entite,"" + dtm.Rows[0][0].ToString() + "<br>" + dtm.Rows[0][1].ToString() + "" as M01,"" + dtm.Rows[1][0].ToString() + "<br>" + dtm.Rows[1][1].ToString() + "" as M02,"" + dtm.Rows[2][0].ToString() + "<br>" + dtm.Rows[2][1].ToString() + "" as M03,"" + dtm.Rows[3][0].ToString() + "<br>" + dtm.Rows[3][1].ToString() + "" as M04,"" + dtm.Rows[4][0].ToString() + "<br>" + dtm.Rows[4][1].ToString() + "" as M05,"" + dtm.Rows[5][0].ToString() + "<br>" + dtm.Rows[5][1].ToString() + "" as M06,"" + dtm.Rows[6][0].ToString() + "<br>" + dtm.Rows[6][1].ToString() + "" as M07,"" + dtm.Rows[7][0].ToString() + "<br>" + dtm.Rows[7][1].ToString() + "" as M08,"" + dtm.Rows[8][0].ToString() + "<br>" + dtm.Rows[8][1].ToString() + "" as M09,"" + dtm.Rows[9][0].ToString() + "<br>" + dtm.Rows[9][1].ToString() + "" as M10,"" + dtm.Rows[10][0].ToString() + "<br>" + dtm.Rows[10][1].ToString() + "" as M11,"" + dtm.Rows[11][0].ToString() + "<br>" + dtm.Rows[11][1].ToString() + "" as M12,"Total" as TT) ";

try
{
dad = new SqlDataAdapter(sql, cn);
//dsm = new DataSet();
dad.Fill(dsm, "entete");

List<string> ListEntete = new List<string>();

for (int i = 0; i <= 13; i++)
{
ListEntete.Add(dsm.Tables["entete"].Rows[0][i].ToString());
}

list.Add("entete", ListEntete);
}
catch (SqlException e)
{

cn.Close();
cn1.Close();
}

0 dla odpowiedzi nr 2

Wydaje mi się, że twoim problemem jest przypisanie zapytania do zmiennej sql.

sql = "(SELECT "Périodes" as entite,"" + dtm.Rows[0][0].ToString() + "<br>" + dtm.Rows[0][1].ToString() + "" as M01,"" + dtm.Rows[1][0].ToString() + "<br>" + dtm.Rows[1][1].ToString() + "" as M02,"" + dtm.Rows[2][0].ToString() + "<br>" + dtm.Rows[2][1].ToString() + "" as M03,"" + dtm.Rows[3][0].ToString() + "<br>" + dtm.Rows[3][1].ToString() + "" as M04,"" + dtm.Rows[4][0].ToString() + "<br>" + dtm.Rows[4][1].ToString() + "" as M05,"" + dtm.Rows[5][0].ToString() + "<br>" + dtm.Rows[5][1].ToString() + "" as M06,"" + dtm.Rows[6][0].ToString() + "<br>" + dtm.Rows[6][1].ToString() + "" as M07,"" + dtm.Rows[7][0].ToString() + "<br>" + dtm.Rows[7][1].ToString() + "" as M08,"" + dtm.Rows[8][0].ToString() + "<br>" + dtm.Rows[8][1].ToString() + "" as M09,"" + dtm.Rows[9][0].ToString() + "<br>" + dtm.Rows[9][1].ToString() + "" as M10,"" + dtm.Rows[10][0].ToString() + "<br>" + dtm.Rows[10][1].ToString() + "" as M11,"" + dtm.Rows[11][0].ToString() + "<br>" + dtm.Rows[11][1].ToString() + "" as M12,"Total" as TT) ";

Odwołujesz się do dtm.Rows [0], ale dtm nie został jeszcze wypełniony żadnymi wierszami, o ile widzę.