Проблемы с преобразованием значений сеанса, когда управление в SQL Server DB - PullRequest
0 голосов
/ 07 апреля 2011

Вот моя проблема: при входе в систему я заполняю 2 сессии, 1 с названием компании и 1 с именем пользователя.Используя эти 2 сеанса, я хотел бы найти соответствующий идентификатор в базе данных.Но, как вы можете догадаться, типы данных сессий и идентификаторы не совпадают, поэтому я полагаю, что некоторые преобразования необходимы.Поэтому в основном я пытаюсь сохранить идентификаторы, соответствующие тексту в сеансах, в таблицу.

Вот код, который я использую до сих пор, но при попытке сохранить это выдает ошибкупорядок.

System.Data.SqlClient.SqlCommand myCommand1 = new System.Data.SqlClient.SqlCommand("SELECT tUserId FROM tblUsers WHERE tUserName=@Username", sqlConn);
                myCommand1.Parameters.AddWithValue("@Username", (string)Session["username"]);
                myCommand1.ExecuteNonQuery();
                int user = Convert.ToInt32(myCommand1.ToString());

                System.Data.SqlClient.SqlCommand myCommand2 = new System.Data.SqlClient.SqlCommand("SELECT tCompId FROM tblCompany WHERE tCompName=@company", sqlConn);
                myCommand2.Parameters.AddWithValue("@company", (string)Session["compNameLogin"]);
                myCommand2.ExecuteNonQuery();
                int comp = Convert.ToInt32(myCommand2.ToString());

                System.Data.SqlClient.SqlCommand myCommand3 = new System.Data.SqlClient.SqlCommand("INSERT INTO tblOrder(tBestCompId, tBestUserId ) VALUES('" + comp + "','" + user + "') ", sqlConn);
                myCommand3.ExecuteNonQuery();

System.FormatException: входная строка была в неправильном формате.в System.Number.StringToNumber (String str, параметры NumberStyles, NumberBuffer & number, информация NumberFormatInfo, логический parseDecimal) в System.Number.ParseInt32 (String s, стиль NumberStyles, информация NumberFormatInfo) в System.Convert.ToInt32 (значение String) * 100*

Это ошибка, с которой я столкнулся.

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

Заранее спасибо.

1 Ответ

2 голосов
/ 07 апреля 2011

Что вы хотите сделать, это получить отдельные данные из БД.Использование ExecuteScalar:

System.Data.SqlClient.SqlCommand myCommand1 = 
         new System.Data.SqlClient.SqlCommand(
              "SELECT tUserId FROM tblUsers WHERE tUserName=@Username", sqlConn);
myCommand1.Parameters.AddWithValue("@Username", (string)Session["username"]);
int user = (int)myCommand1.ExecuteScalar();

ExecuteNonQuery вернет количество затронутых строк.Преобразование myCommand2.ToString() в int определенно не сработает, поскольку myCommand2 не хранит ваш результат (и мы не знаем, каков результат применения ToString() к нему, что в целом является кратким описаниемобъект)

2-е решение:

Вы можете заменить свой код следующим, для которого требуется только один запрос:

string insertQuery = 
@"INSERT INTO tblOrder(tBestCompId, tBestUserId )
 SELECT U.tUserId, T.tblCompany
   FROM (SELECT tUserId FROM tblUsers WHERE tUserName=@Username) U,
        (SELECT tCompId FROM tblCompany WHERE tCompName=@company) T";


System.Data.SqlClient.SqlCommand myCommand
     = new System.Data.SqlClient.SqlCommand(insertQuery, sqlConn);
myCommand.Parameters.AddWithValue("@Username", (string)Session["username"]);
myCommand.Parameters.AddWithValue("@company", (string)Session["compNameLogin"]);
int affectedRows = myCommand1.ExecuteNonQuery();

// affectedRows will contain the number of inserted rows (which is 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...