#c#
#c#
Вопрос:
я создаю веб-метод в asmx…. но всякий раз, когда я запускаю этот метод, я получаю эту ошибку… я хочу вручную добавить строку в dataset с помощью datareader [WebMethod]
public DataSet newleger(string accno, string fromdate, string todate)
{
SqlConnection con = new SqlConnection(@"Data Source=123-PC;Initial Catalog=bcounts;Persist Security Info=True;User ID=Saba;Password=123");
con.Open();
SqlCommand cmd = new SqlCommand("select gt.Value_Date,gt.Voucher_no '-' gr.VchrType as voucher,gt.Acct_Nirration,gr.InstrumentNo,gt.Dr_Amount,gt.Cr_Amount from gl_transaction gt, Gl_Ref gr where gt.Accountno = '" accno "' and gt.Voucher_No=gr.Voucher_no and gt.Value_Date between '" fromdate "' and '" todate "'", con);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
SqlDataReader rdr = cmd.ExecuteReader();
decimal crsum = 0;
decimal drsum = 0;
decimal balance = 0;
DataSet ds = new DataSet("Ledger");;
adp.Fill(ds);
if (rdr.HasRows)
{
while (rdr.Read())
{
if (rdr.GetDecimal(4) > 0)
{
balance = balance rdr.GetDecimal(4);
drsum = rdr.GetDecimal(4);
DataRow dr = ds.Tables[0].NewRow();
dr[0] = rdr.GetDateTime(0).ToShortDateString();
dr[1] = rdr.GetString(1);
dr[2] = rdr.GetString(2);
dr[3] = rdr.GetString(3);
dr[4] = rdr.GetDecimal(4).ToString();
dr[5] = "-";
ds.Tables[0].Rows.Add(dr);
//data.Add(new datalist7(rdr.GetDateTime(0).ToShortDateString(), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetDecimal(4).ToString(), "-", balance.ToString()));
}
else
{
balance = balance - rdr.GetDecimal(5);
crsum = rdr.GetDecimal(5);
DataRow dr = ds.Tables[0].NewRow();
dr[0] = rdr.GetDateTime(0).ToShortDateString();
dr[1] = rdr.GetString(1);
dr[2] = rdr.GetString(2);
dr[3] = rdr.GetString(3);
dr[4] = "-";
dr[5] = rdr.GetDecimal(5).ToString();
ds.Tables[0].Rows.Add(dr);
// data.Add(new datalist7(rdr.GetDateTime(0).ToShortDateString(), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), "-", rdr.GetDecimal(5).ToString(), balance.ToString()));
}
}
DataRow dd = ds.Tables[0].NewRow();
dd[0] = "-";
dd[1] = "-";
dd[2] = "-";
dd[3] = "-";
dd[4] = drsum.ToString();
dd[5] = crsum.ToString();
//data.Add(new datalist7("-", "-", "-", "-", drsum.ToString(), crsum.ToString(), "-"));
}
con.Close();
return ds;
}
Комментарии:
1. попробуйте использовать DataAdapter для чтения всех данных сначала в DataSet / DataTable, затем выполните агрегацию и добавьте строку.
2. Я предполагаю, что вы не можете использовать адаптер и считыватель одновременно. Попробуйте закрыть один, прежде чем использовать другой.
3. как использовать datadapter??? дайте какой-нибудь код
4. У вас уже есть on в вашем коде. После того, как вы вызовете Fill, он заполнит ваш набор данных результатом SQL-запроса. Используя программу чтения, вы выполняете двойную работу. передайте набор данных. Таблицы[0] вам не нужен ридер.
5. что я могу исключить в этом коде???? пожалуйста, помогите…
Ответ №1:
Попробуйте это
public DataSet newleger(string accno, string fromdate, string todate)
{
SqlConnection con = new SqlConnection(@"Data Source=123-PC;Initial Catalog=bcounts;Persist Security Info=True;User ID=Saba;Password=123");
con.Open();
SqlCommand cmd = new SqlCommand("select gt.Value_Date,gt.Voucher_no '-' gr.VchrType as voucher,gt.Acct_Nirration,gr.InstrumentNo,gt.Dr_Amount,gt.Cr_Amount from gl_transaction gt, Gl_Ref gr where gt.Accountno = '" accno "' and gt.Voucher_No=gr.Voucher_no and gt.Value_Date between '" fromdate "' and '" todate "'", con);
SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand = cmd;
decimal crsum = 0;
decimal drsum = 0;
decimal balance = 0;
DataSet ds = new DataSet("Ledger");;
adp.Fill(ds);
foreach (DataRow dr in ds.Tables[0].Rows)
{
//do stuff here....
if(Convert.ToDecimal(dr[4]) > 0)
{
balance = balance Convert.ToDecimal(dr[4]);
drsum = Convert.ToDecimal(dr[4]);
}
else
{
balance = balance - Convert.ToDecimal(dr[5]);
crsum = Convert.ToDecimal(dr[5]);
}
}
//add the totals
DataRow dd = ds.Tables[0].NewRow();
//dd[0] = "-";
//dd[1] = "-";
//dd[2] = "-";
//dd[3] = "-";
dd[4] = drsum;
dd[5] = crsum;
//data.Add(new datalist7("-", "-", "-", "-", drsum.ToString(), crsum.ToString(), "-"));
return ds;
}
Комментарии:
1. что я могу написать вместо rdr?? dr[0] = rdr.GetDateTime(0) . ToShortDateString();
2. Он уже в вашем наборе данных. Попробуйте установить точку останова, и вы сможете просмотреть набор данных и просмотреть табличное представление данных. Ваш набор данных уже заполнен при вызове. SqlDataAdapter . Fill() . Посмотрите мои правки, он, вероятно, будет работать так, как сейчас.
3. Строка не была распознана как допустимая дата-время. теперь я получаю эту ошибку
4. Как выглядит ваша строка?
5. Строка не была распознана как допустимая дата-время. Не удалось сохранить <-> в столбце Value_Date . Ожидае мый тип — DateTime . —>