powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запрос к базе не работает
17 сообщений из 17, страница 1 из 1
Запрос к базе не работает
    #40115105
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,

Пытаюсь вытащить одно значение из базы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
        public XeroOAuth2Token GetXeroToken(string clientId)
        {
            string conString = "Data Source=localhost;Initial Catalog=MyDB;Integrated Security=SSPI";
            SqlConnection con = new SqlConnection(conString);
            con.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            SqlParameter param;
            param = cmd.Parameters.Add("@ClientId", SqlDbType.VarChar, 100);
            param.Value = clientId;
            cmd.CommandText = "SELECT [XeroToken] FROM [MyDB].[dbo].[MyTable] WHERE ClientId = @ClientId";
            //string testToken = Convert.ToString(cmd.ExecuteScalar());
            XeroOAuth2Token xeroToken = (XeroOAuth2Token)cmd.ExecuteScalar();
            con.Close();
            return xeroToken;
        }



Поле XeroToken имеет тип varchar(max) со значением типа такого:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
{
	"Tenants": [
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"authEventId": "00000000-0000-0000-0000-000000000000",
			"TenantId": "00000000-0000-0000-0000-000000000000",
			"TenantType": "ORGANISATION",
			"TenantName": "<redacted>",
			"CreatedDateUtc": "2020-08-15T02:44:51.380643",
			"UpdatedDateUtc": "2020-08-15T02:44:51.38312"
		}
	],
	"AccessToken": "<redacted>",
	"RefreshToken": "<redacted>",
	"IdToken": "<redacted>",
	"ExpiresAtUtc": "2020-08-15T21:24:16.679155Z"
}



Строка с кодом:
Код: c#
1.
XeroOAuth2Token xeroToken = (XeroOAuth2Token)cmd.ExecuteScalar();


не отрабатывает и без всякой ошибки завершает метод.

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

Спасибо.
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115115
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115119
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник


Я все равно не могу понять, что я делаю не так. :(
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115121
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
на какой строке кода происходит завершение работы?
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115126
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Roust_m,
на какой строке кода происходит завершение работы?

На вот этой:
Код: c#
1.
XeroOAuth2Token xeroToken = (XeroOAuth2Token)cmd.ExecuteScalar();
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115132
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m,
оберни все в try-catch, чтобы Exception прочитать.
Замени небезопасный((XeroOAuth2Token)cmd.ExecuteScalar()) кастинг на безопасный.
Эта строка нормально отрабатывает?
Код: c#
1.
string testToken = Convert.ToString(cmd.ExecuteScalar());
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115135
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Roust_m,
оберни все в try-catch, чтобы Exception прочитать.
Замени небезопасный((XeroOAuth2Token)cmd.ExecuteScalar()) кастинг на безопасный.
Эта строка нормально отрабатывает?
Код: c#
1.
string testToken = Convert.ToString(cmd.ExecuteScalar());



Щас попробую. Нет, это тоже не работает. Я думал, что из-за сложной структуры XeroOAuth2Token, но нет, даже обычная строка не работает.
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115138
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Roust_m,
оберни все в try-catch, чтобы Exception прочитать.
Замени небезопасный((XeroOAuth2Token)cmd.ExecuteScalar()) кастинг на безопасный.
Эта строка нормально отрабатывает?
Код: c#
1.
string testToken = Convert.ToString(cmd.ExecuteScalar());



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            try
            {
                XeroOAuth2Token xeroToken = (XeroOAuth2Token)cmd.ExecuteScalar();
                return xeroToken;
            }
            catch (Exception e)
            {
                Console.WriteLine("IOException source: {0}", e.Source);
                Console.WriteLine(e.ToString());
                throw;
            }



IOException source: System.Data
System.InvalidOperationException: ExecuteScalar: Connection property has not been initialized.
at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteScalar()
at ....GetXeroToken(String clientId) in C:\Myfolder\MyProject\MyClass.cs:line 124
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115139
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m
Есть подозрение, что я что-то не так сделал с параметром

Roust_mparam = cmd.Parameters.Add("@ClientId", SqlDbType.VarChar, 100)
А в таблице поле ClientID точно типа varchar? Можно привести DDL для [dbo].[MyTable] ? Наконец, в таблице точно есть запись с передаваемым clientId?
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115140
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны
Roust_m
Есть подозрение, что я что-то не так сделал с параметром

Roust_mparam = cmd.Parameters.Add("@ClientId", SqlDbType.VarChar, 100)

А в таблице поле ClientID точно типа varchar? Можно привести DDL для [dbo].[MyTable] ? Наконец, в таблице точно есть запись с передаваемым clientId?



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE [dbo].[MyTable](
	[PracticeID] [float] NULL,
	[PracticeShortName] [nvarchar](255) NULL,
	[PracticeName] [nvarchar](255) NULL,
	[PracticeCode] [nvarchar](255) NULL,
	[EntityName] [nvarchar](255) NULL,
	[TenantID] [varchar](100) NULL,
	[XeroToken] [varchar](max) NULL,
	[AccessToken] [varchar](4000) NULL,
	[RefreshToken] [varchar](1000) NULL,
	[IdentityToken] [varchar](4000) NULL,
	[Enabled] [tinyint] NOT NULL,
	[EntityId] [int] IDENTITY(1,1) NOT NULL,
	[EnabledBackup] [tinyint] NULL,
	[ClientId] [varchar](100) NULL,
	[ClientSecret] [varchar](100) NULL,
	[CallBackURL] [varchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO



Да, такая запись точно есть. Проверял, когда дебагил.
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115143
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cmd.connection=con;
//или
  using (SqlConnection conn = new SqlConnection(connectionString)) {  
            using (SqlCommand cmd = new SqlCommand(commandText, conn)) {  
               cmd.CommandType = commandType;  
               cmd.Parameters.AddRange(parameters);  

               conn.Open();  
               return cmd.ExecuteScalar();  
            }  
         } 
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115146
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логично =)

Непривязанная к соединению команда
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115198
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m
Сон Веры Павловны
пропущено...

пропущено...

А в таблице поле ClientID точно типа varchar? Можно привести DDL для [dbo].[MyTable] ? Наконец, в таблице точно есть запись с передаваемым clientId?




Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE [dbo].[MyTable](
	[PracticeID] [float] NULL,
	[PracticeShortName] [nvarchar](255) NULL,
	[PracticeName] [nvarchar](255) NULL,
	[PracticeCode] [nvarchar](255) NULL,
	[EntityName] [nvarchar](255) NULL,
	[TenantID] [varchar](100) NULL,
	[XeroToken] [varchar](max) NULL,
	[AccessToken] [varchar](4000) NULL,
	[RefreshToken] [varchar](1000) NULL,
	[IdentityToken] [varchar](4000) NULL,
	[Enabled] [tinyint] NOT NULL,
	[EntityId] [int] IDENTITY(1,1) NOT NULL,
	[EnabledBackup] [tinyint] NULL,
	[ClientId] [varchar](100) NULL,
	[ClientSecret] [varchar](100) NULL,
	[CallBackURL] [varchar](100) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO



Да, такая запись точно есть. Проверял, когда дебагил.


ExecuteScalar: Connection property has not been initialized.
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115232
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cmd.connection=con;
//или
  using (SqlConnection conn = new SqlConnection(connectionString)) {  
            using (SqlCommand cmd = new SqlCommand(commandText, conn)) {  
               cmd.CommandType = commandType;  
               cmd.Parameters.AddRange(parameters);  

               conn.Open();  
               return cmd.ExecuteScalar();  
            }  
         } 



Спасибо, запрос заработал. Только конвертирование не работает:
IOException source: project
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'Xero.NetStandard.OAuth2.Token.XeroOAuth2Token'.
at ...GetXeroToken(String clientId) in C:\Myfolder\project\class.cs:line 126

Как лучше всего понять, почему?

Формат токена должен быть такой:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
{
	"Tenants": [
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"authEventId": "00000000-0000-0000-0000-000000000000",
			"TenantId": "00000000-0000-0000-0000-000000000000",
			"TenantType": "ORGANISATION",
			"TenantName": "<redacted>",
			"CreatedDateUtc": "2020-08-15T02:44:51.380643",
			"UpdatedDateUtc": "2020-08-15T02:44:51.38312"
		}
	],
	"AccessToken": "<redacted>",
	"RefreshToken": "<redacted>",
	"IdToken": "<redacted>",
	"ExpiresAtUtc": "2020-08-15T21:24:16.679155Z"
}



И в таком виде я его храню в базе.
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115243
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roust_m
vb_sub
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
cmd.connection=con;
//или
  using (SqlConnection conn = new SqlConnection(connectionString)) {  
            using (SqlCommand cmd = new SqlCommand(commandText, conn)) {  
               cmd.CommandType = commandType;  
               cmd.Parameters.AddRange(parameters);  

               conn.Open();  
               return cmd.ExecuteScalar();  
            }  
         } 



Спасибо, запрос заработал. Только конвертирование не работает:
IOException source: project
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'Xero.NetStandard.OAuth2.Token.XeroOAuth2Token'.
at ...GetXeroToken(String clientId) in C:\Myfolder\project\class.cs:line 126

Как лучше всего понять, почему?

Формат токена должен быть такой:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
{
	"Tenants": [
		{
			"id": "00000000-0000-0000-0000-000000000000",
			"authEventId": "00000000-0000-0000-0000-000000000000",
			"TenantId": "00000000-0000-0000-0000-000000000000",
			"TenantType": "ORGANISATION",
			"TenantName": "<redacted>",
			"CreatedDateUtc": "2020-08-15T02:44:51.380643",
			"UpdatedDateUtc": "2020-08-15T02:44:51.38312"
		}
	],
	"AccessToken": "<redacted>",
	"RefreshToken": "<redacted>",
	"IdToken": "<redacted>",
	"ExpiresAtUtc": "2020-08-15T21:24:16.679155Z"
}



И в таком виде я его храню в базе.


вы получаете строку, конвертируйте ее в ваш JSON
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115271
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин

вы получаете строку, конвертируйте ее в ваш JSON


Типа сначала строку в JSON а потом JSON в Xero.NetStandard.OAuth2.Token.XeroOAuth2Token объект?
...
Рейтинг: 0 / 0
Запрос к базе не работает
    #40115274
Фотография Roust_m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Код: c#
1.
2.
3.
4.
5.
                String tempToken = (String)cmd.ExecuteScalar();
                tempToken = tempToken.Replace("\"", "\'");
                tempToken = tempToken.Replace("\n", " ");
                JObject json = JObject.Parse(tempToken);
                XeroOAuth2Token xeroToken = (XeroOAuth2Token)json;



Выдает:
Error CS0030 Cannot convert type 'Newtonsoft.Json.Linq.JObject' to 'Xero.NetStandard.OAuth2.Token.XeroOAuth2Token'
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запрос к базе не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]