#c# #sql #sql-server
#c# #sql #sql-сервер
Вопрос:
Я изо всех сил пытаюсь создать программу тестирования для своей базы данных.
Мое подключение к базе данных работает, и все, что я просто не могу заставить запросы работать. И я понятия не имею, как просмотреть результаты, возможно, в списке или что-то в этом роде.
Это то, что у меня есть до сих пор:
public static string Query1()
{
List<string[]> returnvalue = new List<string[]>();
if (DatabaseConnection.OpenConnection())
{
try
{
DatabaseConnection.OpenConnection();
SqlCommand cmd = new SqlCommand("SELECT * FROM UniqueWeapon U, Weapon W WHERE W.WeaponID = U.WeaponIDFK AND U.AllyIDFK IS NOT NULL AND W.Damage > 10 AND W.WeaponType = 'Spell';", DatabaseConnection.connect);
cmd.Connection = DatabaseConnection.connect;
SqlDataAdapter dap = new SqlDataAdapter(cmd);
DataTable tbl = new DataTable();
dap.Fill(tbl);
//cmd.CommandText = "SELECT * FROM UniqueWeapon U, Weapon W WHERE W.WeaponID = U.WeaponIDFK AND U.AllyIDFK IS NOT NULL AND W.Damage > 10 AND W.WeaponType = 'Spell';";
//cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
dap.Fill(tbl);
}
}
catch (SqlException e)
{
Console.WriteLine("Query Failed: " e.StackTrace e.Message.ToString());
return "returnvalue";
}
finally
{
DatabaseConnection.CloseConnection();
}
}
return "returnvalue";
}
Любая обратная связь или помощь были бы больны!
Спасибо!
Комментарии:
1. что вы имеете в виду под «я просто не могу заставить запросы работать» .. у вас есть ошибки? … неправильный результат? .. нет результатов? .. предоставьте образцы данных и ожидаемый результат
2. не похоже, что вы что-то делаете с результатами, чтобы «распечатать их в моем приложении», как говорится в вашей учетной записи sock puppet
3. Вы используете синтаксис соединения, устаревший более 20 лет назад. Вы нашли это на каком-то древнем веб-сайте? Вместо этого используйте правильные соединения ANSI :
SELECT * FROM Weapon W JOIN UniqueWeapon U ON U.WeaponIDFK = W.WeaponID AND U.AllyIDFK IS NOT NULL WHERE W.Damage > 10 AND W.WeaponType = 'Spell'
.
Ответ №1:
В вашем коде есть некоторые проблемы:
1) Использование метода DatabaseConnection.openConnection()
if (DatabaseConnection.OpenConnection()) // means it's true with Connection to db
{
try
{
DatabaseConnection.OpenConnection(); // why you open it again
.......
2) вы возвращаете фиктивную строку, и вы уже создали локальную таблицу данных, заполненную данными, но невидимую за пределами области действия метода
3) вы заполняете datatable дважды
4) вы не отслеживаете результаты с помощью Debug, чтобы узнать, в чем проблема
Измените свой код следующим образом: прочитайте мои комментарии в своем коде. Я создал класс DatabaseConnection для тестирования предоставленного кода, и он работает.
public static DataTable Query1()
{
// why this variable returnvalue, you don't fill it
List<string[]> returnvalue = new List<string[]>();
//check the connection with database by using DatabaseConnection.OpenConnection() only once, and using the property Connect
if (DatabaseConnection.connect.State == ConnectionState.Closed)
DatabaseConnection.OpenConnection();
DataTable tbl = new DataTable(); //use it as a return value
try
{
SqlCommand cmd = new SqlCommand("SELECT * FROM UniqueWeapon U, Weapon W WHERE W.WeaponID = U.WeaponIDFK AND U.AllyIDFK IS NOT NULL AND W.Damage > 10 AND W.WeaponType = 'Spell';", DatabaseConnection.connect);
cmd.Connection = DatabaseConnection.connect; //connect is SQlConnection
SqlDataAdapter dap = new SqlDataAdapter(cmd);
//DataTable tbl = new DataTable(); //use it as a return value
dap.Fill(tbl);
Debug.WriteLine(tbl.Rows.Count);
//cmd.CommandText = "SELECT * FROM UniqueWeapon U, Weapon W WHERE W.WeaponID = U.WeaponIDFK AND U.AllyIDFK IS NOT NULL AND W.Damage > 10 AND W.WeaponType = 'Spell';";
//cmd.ExecuteNonQuery();
//why that code, you already filled the table using SqlDataAdapter
//SqlDataReader reader = cmd.ExecuteReader();
//while (reader.Read())
//{
// dap.Fill(tbl);
//}
// but if you want to fill datatable from Datareader use: tbl.Load(reader)
}
catch (SqlException e)
{
Console.WriteLine("Query Failed: " e.StackTrace e.Message.ToString());
//return "returnvalue";
}
finally
{
DatabaseConnection.CloseConnection();
}
//return "returnvalue";
return tbl;
}