Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitef082bc

Browse files
Ignore processing collation for JSON output params and enhance test coverage (#3168) (#3173)
This commitfixes#3167 where reading output parameter of type JSON resulted in an error.Additionally, test coverage has been enhanced to include tests for insertions and readswith SqlJson and output parameters of type JSON.
1 parentdafc5a5 commitef082bc

File tree

5 files changed

+81
-4
lines changed

5 files changed

+81
-4
lines changed

‎src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/TdsParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4368,7 +4368,7 @@ internal TdsOperationStatus TryProcessReturnValue(int length, TdsParserStateObje
43684368
}
43694369
}
43704370
}
4371-
else if (rec.metaType.IsCharType)
4371+
else if (rec.metaType.IsCharType && rec.metaType.SqlDbType != SqlDbTypeExtensions.Json)
43724372
{
43734373
// read the collation for 8.x servers
43744374
result = TryProcessCollation(stateObj, out rec.collation);

‎src/Microsoft.Data.SqlClient/netfx/src/Microsoft/Data/SqlClient/TdsParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4837,7 +4837,7 @@ internal TdsOperationStatus TryProcessReturnValue(int length,
48374837
}
48384838
}
48394839
}
4840-
else if (_is2000 && rec.metaType.IsCharType)
4840+
else if (_is2000 && rec.metaType.IsCharType && rec.metaType.SqlDbType != SqlDbTypeExtensions.Json)
48414841
{
48424842
// read the collation for 8.x servers
48434843
result = TryProcessCollation(stateObj, out rec.collation);

‎src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlParameter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1993,7 +1993,7 @@ internal void Validate(int index, bool isCommandProc)
19931993
(SqlDbType!=SqlDbType.Udt)&&
19941994
// BUG: (VSTFDevDiv - 479609): Output parameter with size 0 throws for XML, TEXT, NTEXT, IMAGE.
19951995
// NOTE: (VSTFDevDiv - 479609): Not Fixed for TEXT, NTEXT, IMAGE as these are deprecated LOB types.
1996-
(SqlDbType!=SqlDbType.Xml)&&
1996+
(SqlDbType!=SqlDbType.Xml&&SqlDbType!=SqlDbTypeExtensions.Json)&&
19971997
!metaType.IsVarTime
19981998
)
19991999
{

‎src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,17 @@ public static void CreateTable(SqlConnection sqlConnection, string tableName, st
603603
}
604604
}
605605

606+
publicstaticvoidCreateSP(SqlConnectionsqlConnection,stringspName,stringspBody)
607+
{
608+
DropStoredProcedure(sqlConnection,spName);
609+
stringspCreate="CREATE PROCEDURE "+spName+spBody;
610+
using(SqlCommandcommand=sqlConnection.CreateCommand())
611+
{
612+
command.CommandText=spCreate;
613+
command.ExecuteNonQuery();
614+
}
615+
}
616+
606617
publicstaticvoidDropTable(SqlConnectionsqlConnection,stringtableName)
607618
{
608619
ResurrectConnection(sqlConnection);

‎src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/JsonTest/JsonTest.cs

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
usingXunit;
1111
usingXunit.Abstractions;
1212
usingSystem.Text.Json;
13+
usingMicrosoft.Data.SqlTypes;
1314

1415
namespaceMicrosoft.Data.SqlClient.ManualTesting.Tests
1516
{
@@ -124,6 +125,12 @@ public void TestJsonWrite()
124125
ValidateRowsAffected(rowsAffected3);
125126
}
126127

128+
//Test 4
129+
// Write json value using a parameterized query with SqlJson type
130+
parameter.Value=newSqlJson(JsonDataString);
131+
introwsAffected4=command.ExecuteNonQuery();
132+
ValidateRowsAffected(rowsAffected4);
133+
127134
DataTestUtility.DropTable(connection,tableName);
128135
DataTestUtility.DropStoredProcedure(connection,spName);
129136
}
@@ -182,6 +189,12 @@ public async Task TestJsonWriteAsync()
182189
ValidateRowsAffected(rowsAffected3);
183190
}
184191

192+
//Test 4
193+
// Write json value using a parameterized query with SqlJson type
194+
parameter.Value=newSqlJson(JsonDataString);
195+
introwsAffected4=awaitcommand.ExecuteNonQueryAsync();
196+
ValidateRowsAffected(rowsAffected4);
197+
185198
DataTestUtility.DropTable(connection,tableName);
186199
DataTestUtility.DropStoredProcedure(connection,spName);
187200
}
@@ -354,7 +367,7 @@ public void TestJsonAPIs()
354367
// Create Table
355368
DataTestUtility.CreateTable(connection,tableName,"(Data json)");
356369

357-
//Insert Null value
370+
//Insert
358371
command.CommandText=tableInsert;
359372
varparameter=newSqlParameter("@jsonData",SqlDbTypeExtensions.Json);
360373
parameter.Value=JsonDataString;
@@ -373,6 +386,7 @@ public void TestJsonAPIs()
373386
Assert.Equal(JsonDataString,jsonDocument.RootElement.ToString());
374387
Assert.Equal("json",reader.GetDataTypeName(0));
375388
Assert.Equal("System.String",reader.GetFieldType(0).ToString());
389+
Assert.Equal(JsonDataString,reader.GetSqlJson(0).Value);
376390
}
377391
}
378392
}
@@ -439,5 +453,57 @@ public void TestJsonWithMARS()
439453
}
440454
}
441455
}
456+
457+
[ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.IsJsonSupported))]
458+
publicvoidTestJsonSPParams()
459+
{
460+
stringtableName=DataTestUtility.GenerateObjectName();
461+
stringprocName=DataTestUtility.GenerateObjectName();
462+
stringtableInsert=$"INSERT INTO{tableName} VALUES (@id, @jsonData)";
463+
stringtableRead=$"SELECT * FROM{tableName}";
464+
465+
using(SqlConnectionconnection=newSqlConnection(DataTestUtility.TCPConnectionString))
466+
{
467+
connection.Open();
468+
try
469+
{
470+
// Create Table
471+
DataTestUtility.CreateTable(connection,tableName,"(Id int, Data json)");
472+
473+
// Create Stored Procedure
474+
stringcreateSP=$@"
475+
@id int,
476+
@jsonData json OUTPUT
477+
AS
478+
BEGIN
479+
SELECT @jsonData = (SELECT Data FROM{tableName} WHERE Id = @id)
480+
END;";
481+
DataTestUtility.CreateSP(connection,procName,createSP);
482+
483+
// Insert Data
484+
using(SqlCommandcommand=newSqlCommand(tableInsert,connection))
485+
{
486+
command.Parameters.Add(newSqlParameter("@id",SqlDbType.Int){Value=1});
487+
command.Parameters.Add(newSqlParameter("@jsonData",SqlDbTypeExtensions.Json){Value=JsonDataString});
488+
command.ExecuteNonQuery();
489+
}
490+
491+
// Execute Stored Procedure
492+
using(SqlCommandspCommand=newSqlCommand(procName,connection))
493+
{
494+
spCommand.CommandType=CommandType.StoredProcedure;
495+
spCommand.Parameters.Add(newSqlParameter("@id",SqlDbType.Int){Direction=ParameterDirection.Input,Value=1});
496+
SqlParameteroutputParam=newSqlParameter("@jsonData",SqlDbTypeExtensions.Json){Direction=ParameterDirection.Output};
497+
spCommand.Parameters.Add(outputParam);
498+
spCommand.ExecuteNonQuery();
499+
Assert.Equal(JsonDataString,(string)outputParam.Value);
500+
}
501+
}
502+
finally
503+
{
504+
DataTestUtility.DropTable(connection,tableName);
505+
}
506+
}
507+
}
442508
}
443509
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp