Рейтинг:
2
OriginalGriff
Хм.
Я не вижу ничего, что включало бы ваш DataTable вне метода, в котором вы его загружаете (и вам было бы лучше сделать это с помощью DataAdapter, а не DataReader - это включает в себя гораздо меньше обходов в БД), поэтому совершенно не очевидно, что вы хотите сделать.
Но... на ум приходят две вещи: зачем ловить все исключения, если все, что вы собираетесь сделать, это повторно бросить их? Это совсем не помогает, а только все усложняет. Вы можете просто взять try...finally
блок и пропустить catch
если это то, что вы пытаетесь сделать, или даже лучше использовать using
блок для закрытия и удаления соединения (и еще один для команды) вместо блока try.
using (SqlConnection conn = new SqlConnection(strConnect))
{
using (SqlCommand cmd = new SqlCommand(spName, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(sqlParams.ToArray());
using (DataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
}
}
Во-вторых, если это
double
тогда он провалится.
int.TryParse
тест - наличие '.' в текстовой строке будет означать, что это не целое число, поэтому внешний TryParse потерпит неудачу и никогда не доберется до Double.Разбор. Используйте Двойное.TryParse как единственный и неповторимый тест, и используйте значение, которое он преобразовал:
private void btnHitung_Click(object sender, EventArgs e)
{
double value;
if (double.TryParse(txtBasoSU.Text, out value))
{
TotalPriceOfBasoSU = BasoSUCost * value;
...
}
}
Muhammad nur Ihsan
что такое двойное значение; для чего? как точно получить значение из таблицы данных sql server?.
OriginalGriff
Когда вы используете TryParse, он сохраняет результат в переменной, которую вы передаете ему через параметр out, и возвращает true/false для "хорошего/плохого преобразования"
двойное значение;
это просто объявление переменной, в которую нужно вставить преобразованное значение, если преобразование работает.
Muhammad nur Ihsan
его действительно трудно понять, я просто хотел получить значение из datatable в мое текстовое поле..
OriginalGriff
Это сложнее, чем вы думаете, потому что DataTable не содержит только одно значение - это таблица, что означает, что она содержит строки столбцов данных.
Первое, что вам нужно решить, - это какая строка вам нужна и какой столбец этой строки?
Muhammad nur Ihsan
хорошо, так что у меня есть 2 столбца есть "продукты" и "цена" у меня есть только 5 строк один из них "BasoSU" он имеет "2000" для цены, как я хочу умножить его цену с любым числом, введенным из текстового поля.... пожалуйста, приведите пример еще раз.. что вообще мне нужно добавить в программу?
и кстати, класс DAL предназначен для формы входа и регистрации, нужно ли мне снова создавать класс для этой проблемы?
OriginalGriff
Нет, это не так - у строк нет "имен", это делают только столбцы.
Вы имеете в виду, что у вас есть строка, содержащая столбец продукта, содержащий текст "BasoSU"?
Muhammad nur Ihsan
да колонка продукта содержащая текст BasoSU
и столбец цены, содержащий текст 2000 <-- я хочу сделать расчет типа 2 * 2000 и установить его в BasoSUCost in
"частная btnHitung_Click недействительным(объект отправителя, EventArgs в электронной)
{
if (int.Метод tryparse(txtBasoSU.Текст, из NumberofOrder))
{
ItemBasoSU = Двойной.Синтаксический анализ(txtBasoSU.Текст);
TotalPriceOfBasoSU = BasoSUCost * ItemBasoSU;
}"
Muhammad nur Ihsan
перед тем как использовать sql server для создания данных я просто записываю значение в форму cs следующим образом
общественный разделяемого класса Meja1 : форма
{
//АНАЛИЗАТОР - АНАЛИЗАТОР ЦЕНА MAKANAN
double cBasoSU_PRICE = 20000;
double cBasoC_PRICE = 15000;
double cBasoM_PRICE = 15000;
double cBasoB_PRICE = 15000;
двойная cMieA_PRICE = 11000;
double cMieAB_PRICE = 15000;
общественные Meja1()
{
метод InitializeComponent();
}
частная btnHitung_Click недействительным(объект отправителя, EventArgs в электронной)
{
//ДЕКЛАРАСИ
// Стоимость //angka inputmakan //var dijadikan dariatas
Двойной BasoSUCost; Двойной ItemBasoSU; Двойной HargaBasoSU;
Двойной BasoCCost; Двойной ItemBasoC; Двойной HargaBasoC;
Двойной BasoMCost; Двойной ItemBasoM; Двойной HargaBasoM;
Двойной BasoBCost; Двойной ItemBasoB; Двойной HargaBasoB;
//Ми
Двойной MieACost; Двойной ItemMieA; Двойной HargaMieA;
Двойной MieABCost; Двойной ItemMieAB; Двойной HargaMieAB;
//ПРЕОБРАЗОВАТЬ
//MAKANAN
BasoSUCost = cBasoSU_PRICE;
BasoCCost = cBasoC_PRICE;
BasoMCost = cBasoM_PRICE;
BasoBCost = cBasoB_PRICE;
MieACost = cMieA_PRICE;
MieABCost = cMieAB_PRICE;
if (int.Метод tryparse(txtBasoSU.Текст, из NumberofOrder))
{
ItemBasoSU = Двойной.Синтаксический анализ(txtBasoSU.Текст);
HargaBasoSU = BasoSUCost * ItemBasoSU;
if (int.Метод tryparse(txtBasoC.Текст, из NumberofOrder))
{
ItemBasoC = Двойной.Синтаксический анализ(txtBasoC.Текст);
HargaBasoC = BasoCCost * ItemBasoC;
if (int.Метод tryparse(txtBasoM.Текст, из NumberofOrder))
{
ItemBasoM = Двойной.Синтаксический анализ(txtBasoM.Текст);
HargaBasoM = BasoMCost * ItemBasoM;
if (int.Метод tryparse(txtBasoB.Текст, out NumberofOrder))
{
ItemBasoB = Двойной.Синтаксический анализ(txtBasoB.Текст);
HargaBasoB = BasoBCost * ItemBasoB;
if (int.Метод tryparse(txtMieA.Текст, из NumberofOrder))
{
ItemMieA = Двойной.Синтаксический анализ(txtMieA.Текст);
HargaMieA = MieACost * ItemMieA;
if (int.Метод tryparse(txtMieAB.Текст, из NumberofOrder))
{
ItemMieAB = Двойной.Синтаксический анализ(txtMieAB.Текст);
HargaMieAB = MieABCost * ItemMieAB;
mcFoodTotal = HargaBasoSU + HargaBasoC + HargaBasoM + HargaBasoB + HargaMieA + HargaMieAB;
тхцервисмаканан.текстовая строка.Формат("Rp. {0:N} ", mcFoodTotal);
}
}
}
}
}
}
я хочу использовать sqlserver для хранения данных, чтобы я мог легко изменить значение, но на самом деле это чертовски трудно, лол
OriginalGriff
Это не так "трудно, как ад" - просто вы должны понять, что происходит! И как только вы это сделаете, использование БД станет вашей второй натурой, и вы зададитесь вопросом, из-за чего весь этот шум...
Полные сведения-это слишком много, чтобы вдаваться в такое маленькое текстовое поле, как это, но в основном таблица БД содержит "подобную" информацию вместе: таким образом, у вас есть столбец "продукт" и столбец "цена", и каждая строка таблицы содержит другой продукт и связанную с ним цену.
Таблица проведут тип nvarchar(МАКС) (который является SQL-говорить за "строка") вызвать "продукта" и поплавок столбца (который является SQL-говорить за "двойной") под названием "Цена".
Когда вам нужно определенное значение из БД вы можете запросить только это одно значение с помощью запроса SELECT:
using (SqlCommand cmd = new SqlCommand("SELECT Price From MyTable WHERE Product = 'BasoSU'", con))
{
double value = (double) cms.ExecuteScalar();
...
}
ExecuteScalar предназначен для возврата только одного значения, которое затем преобразуется обратно в double.
Есть ли в этом смысл?
Muhammad nur Ihsan
ладно , а для чего нужен кон?
частная btnHitung_Click недействительным(объект отправителя, EventArgs в электронной)
{
используя (команда sqlcommand cmd и = новая команда sqlcommand("Select Цена от продуктов, где продукт = 'BasoSU'", кон))
{
double BasoSUCost = (двойной)cmd.Executescalar так();
...
}
OriginalGriff
Это объект SqlConnection, который вы уже открыли.
И прежде чем вы спросите, можете ли вы догадаться, что такое "MyTable"? :смеяться:
Muhammad nur Ihsan
да, мое имя базы данных-MyLoginApp, а имя таблицы - "продукты"
пожалуйста помогите я хочу сделать 2000 быть BasoSUCost так что я могу сделать расчет из него :(
я хочу установить 2000, чтобы быть BasoSUCost здесь
частная btnHitung_Click недействительным(объект отправителя, EventArgs в электронной)
{
if (int.Метод tryparse(txtBasoSU.Текст, из NumberofOrder))
{
ItemBasoSU = Двойной.Синтаксический анализ(txtBasoSU.Текст);
TotalPriceOfBasoSU = BasoSUCost * ItemBasoSU;
}
OriginalGriff
Так что вы знаете, чем заменить "MyTable" тогда.
И я знаю, что вы знаете, как создать и открыть SqlConnection...
Muhammad nur Ihsan
черт.. могу ли я дать вам свой источник и помочь мне xD или как я могу загрузить фотографию здесь.. спасибо за ответ в любом случае, но все еще смущает меня
OriginalGriff
Нет, давай - это твое домашнее задание, а не мое! :смеяться:
Просто подумайте об этом и посмотрите на то, что у вас есть так afr - у вас есть все биты, которые вам должны понадобиться.
Muhammad nur Ihsan
можете ли вы объяснить "двойное значение = (double)cmd.Executescalar так();"
защищенный SqlConnection conn;
частная btnHitung_Click недействительным(объект отправителя, EventArgs в электронной)
{
используя (команда sqlcommand cmd и = новая команда sqlcommand("Select Цена от продуктов, где продукт = 'BasoSU'", соед))
{
двойное значение = (double)cmd.Executescalar так();
}
OriginalGriff
Я сделал:
"ExecuteScalar предназначен для возврата только одного значения, которое вы затем возвращаете в double."
Он выполняет команду, которую вы ему дали, и возвращает одно значение.
Muhammad nur Ihsan
ExecuteScalar: свойство соединения не было инициализировано
что я пропустил?
я извиняюсь за то, что все еще сомневаюсь..!
защищенный SqlConnection conn;
частная btnHitung_Click недействительным(объект отправителя, EventArgs в электронной)
{
if (int.Метод tryparse(txtBasoSU.Текст, из NumberofOrder))
{
используя (команда sqlcommand cmd и = новая команда sqlcommand("Select Цена от продуктов, где продукт = 'BasoSU'", соед))
{
double BasoSUCost = (двойной)cmd.Executescalar так();
ItemBasoSU = Двойной.Синтаксический анализ(txtBasoSU.Текст);
HargaBasoSU = BasoSUCost * ItemBasoSU;
}
}
OriginalGriff
Пожалуйста, подумайте об этом!
Из вашего исходного кода:
строки strConnect = "сервер=ПК\именем sqlexpress\; базы данных=MyLoginApp;параметр trusted_connection=истина;";
SqlConnection conn = новый SqlConnection();
что, по-вашему, делал этот код, когда вы его писали? :смеяться: