Kishore_Patel Ответов: 1

Оценка значений переменных ( манипулирование переменными и значениями )


у меня есть 2 стола

1. Таблица отчета (с полями (cols))
на col1 столбец col2 кол3 col4 col5 col6 col7
"trx_no" "trx_date" "количество" "ставка" "количество * ставка" "налог" "(количество * ставка)+налог"

2. таблица транзакций (с полями (cols))
trx_no trx_date количество ставка налог
"00001" "01/04/2020" 20 150 540
"00002" "05/04/2020" 100 110 1980


************
Примечание : таблицы данных не изменятся, они доступны только для чтения
как я могу manupulate col1, col2, col3,...... так что на консоли я получаю

************
"00001"
"01/04/2020"
20
150
3000
540
3540


Что я уже пробовал:

private void TData_Grid(string RMST)
       {
           if (SPDConn.State != ConnectionState.Open)
           {
               SPDConn.Close();
               SPDConn.Open();
           }
           if (SPMConn.State != ConnectionState.Open)
           {
               SPMConn.Close();
               SPMConn.Open();
           }

           string str1 = "select * from dbo.trxdat" + SPGlobal.spyear + " where cmp_code = '" + SPGlobal.spcmp_code + "' and trx_type = '" + RMST + "'";
           SqlCommand mcmd = new SqlCommand(str1, SPDConn);
           SqlDataReader mrdr = mcmd.ExecuteReader();

           string   trx_no;
           DateTime trx_date;
           decimal  quantity, rate, tax;

           while (mrdr.Read())
           {
               //transfering datatable to variables
               trx_no   = mrdr["trx_no"].ToString();
               trx_date = (DateTime)mrdr["trx_date"];
               quantity = (decimal)mrdr["quantity"];
               rate     = (decimal)mrdr["rate"];
               tax      = (decimal)mrdr["tax"];

               Console.WriteLine(col1);
               Console.WriteLine(col3);
               Console.WriteLine(col4);
               Console.WriteLine(col5);
               Console.WriteLine(col6);
               Console.WriteLine(col7);

           }
           mrdr.Close();
       }

Richard MacCutchan

У тебя был вопрос?

Maciej Los

Я глубже вгляделся в содержание и нашел его: "как я могу manupulate col1, col2, col3,...... так что на консоли я получаю"

Kishore_Patel

на консоли выше модуль пишет :
"trx_no"
"trx_date"
"количество"
"ставка"
"количество * ставка"
"налог"
"(количество * ставка)+налог"

я хочу, чтобы значения

Richard MacCutchan

Посмотри на свой код. Вы храните эти укусы в col1, col2 и т. д., Так что это то, что будет вашим выходом.

1 Ответов

Рейтинг:
2

Maciej Los

Ну, нет никакой связи между столами! Если report таблица определяет правила отображения данных из transaction таблица, там должна быть ссылка на transaction стол. Затем вы должны создать класс, ответственный за создание запроса. Например:

void Main()
{
	DataTable dt = new DataTable();
	string sConn = @"your connection string";
	using(SqlConnection connection = new SqlConnection(sConn))
	{
		connection.Open();
		//get view for transaction table
		string sComm = "SELECT * FROM report WHERE reftable='transactiontbl' AND viewname='view1';";
		using(SqlCommand command= new SqlCommand(sComm, connection))
			using(SqlDataReader reader = command.ExecuteReader())
				dt.Load(reader);
		//convert data row into query
		string qry = QueryHelper.GetQuery(dt.Rows[0]);
		//get result set
		dt = new DataTable();
		using(SqlCommand command= new SqlCommand(qry, connection))
			using(SqlDataReader reader = command.ExecuteReader())
				dt.Load(reader);
	}
	
	foreach(DataRow dr in dt.Rows)
		Console.WriteLine(string.Join(" | ", dr.Table.Columns.Cast<DataColumn>().Select(x=> $"'{x.ColumnName}' = {dr[x]}")));

}

// Define other methods and classes here
public static class QueryHelper
{
	public static string GetQuery(DataRow dr)
	{
		StringBuilder sb = new StringBuilder();
		sb.Append("SELECT ");
		foreach(DataColumn dc in dr.Table.Columns)
		{
			if(dc.ColumnName.StartsWith("col") && !DBNull.Value.Equals(dr[dc]))
			{
				sb.Append($"{dr[dc]} AS {dc.ColumnName}");
				if (dr.Table.Columns.IndexOf(dc) < dr.Table.Columns.Count-1) sb.Append(", ");
			}
		}
		sb.Append($" FROM {dr["reftable"]};");
		return sb.ToString();
	}

}


Результат:
'col1' = 00001 | 'col2' = 2020-04-01 00:00:00 | 'col3' = 20 | 'col4' = 150 | 'col5' = 3000 | 'col6' = 540 | 'col7' = 3540
'col1' = 00002 | 'col2' = 2020-04-05 00:00:00 | 'col3' = 100 | 'col4' = 110 | 'col5' = 11000 | 'col6' = 1980 | 'col7' = 12980


Примечание:
Я добавил ссылку на report таблица к transaction стол. Поля:
- reftable
- viewname
используются для получения четкого соответствия.

Если вы не можете этого сделать, вы должны быть в состоянии каким-то образом получить четкие данные. Я не на вашем месте, так что... не стесняйтесь менять вышеприведенный код в соответствии с вашими потребностями.

Удачи вам!


Kishore_Patel

Большое вам спасибо за вашу помощь, так как я более свеж для C# ваш код трудно понять и интегрировать в мой код, но он решит так много моих проблем с генерацией отчетов. Большое спасибо.