CREATE PROCEDURE [dbo].[spSaveMyProfile]
(
@data ntext = null
)
AS
SET NOCOUNT ON
DECLARE @hDoc int
if (@data is not null)
BEGIN
EXEC sp_xml_preparedocument @hDoc OUTPUT, @data
--UPDATEUPDATE Users
SET
Name = XmlUsers.Name,
[Family name] = XmlUsers.[Family name],
[Logo] = XmlUsers.Logo
FROM
OPENXML(@hDoc, '/NewDataSet/My_x0020_profile')
WITH (
ID int,
Name nvarchar(50),
[Family name] nvarchar(50),
[Logo] image
) XmlUsers
WHERE
Users.ID = XmlUsers.ID
--INSERTINSERT INTO Users
(ID,
Name,
[Family name],
Logo)
SELECT
XmlUsers.ID,
XmlUsers.Name,
XmlUsers.[Family name],
XmlUsers.[Logo]
FROM
OPENXML(@hDoc, 'NewDataSet/My_x0020_profile')
WITH (
ID int,
Name nvarchar(50),
[Family name] nvarchar(50),
[Logo] image
) XmlUsers
WHERE
XmlUsers.ID NOT IN (SELECT ID FROM Users)
EXEC sp_xml_removedocument @hDoc
END--if (@data is not null)
GO
Вышеуказанная хранимая процедура вызывается следующим образом:
Public Sub XmlSaveData(table as DataTable)
Dim sb As System.Text.StringBuilder
Dim sw As IO.StringWriter
Try
If (table.GetChanges() IsNot Nothing) Then
For Each col As DataColumn In table.Columns
col.ColumnMapping = MappingType.Attribute
Next'col As DataColumn In table.Columns
'NEW AND MODIFIED VALUESIf (table.GetChanges(DataRowState.Added Or DataRowState.Modified) IsNot Nothing) Then
sb = New System.Text.StringBuilder(1000)
sw = New IO.StringWriter(sb)
table.GetChanges(DataRowState.Added Or _
DataRowState.Modified).WriteXml(sw, XmlWriteMode.WriteSchema)
Debug.WriteLine(sb.ToString())
_cmdXmlSave.Parameters(0).Value = sb.ToString()
sw.Close()
End If'(table.GetChanges(DataRowState.Added Or DataRowState.Modified) IsNot Nothing)
OpenDBConnection(True)
_cmdXmlSave.ExecuteNonQuery()
End If'(table.GetChanges() IsNot Nothing) Catch ex As Exception
...
Finally
CloseDBConnection(True)
End Try
End Sub
Поле Logo (тип image) не сохраняется.
ПОЧЕМУ? И как сделать так чтобы сохранялось?
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, pukapin, Вы писали:
P>>Поле Logo (тип image) не сохраняется. P>>ПОЧЕМУ? И как сделать так чтобы сохранялось?
___>Я уже догадался, что это MS SQL. А вот версию угадать не смог. Неужели сразу нельзя это писать в исходном посте ?
Извиняюсь.
MS SQL 2000 sp4.
Здравствуйте, pukapin, Вы писали:
P> UPDATE Users P> SET P> Name = XmlUsers.Name, P> [Family name] = XmlUsers.[Family name], P> [Logo] = XmlUsers.Logo P> FROM P> OPENXML(@hDoc, '/NewDataSet/My_x0020_profile') P> WITH ( P> ID int, P> Name nvarchar(50), P> [Family name] nvarchar(50), P> [Logo] image P> ) XmlUsers P> WHERE P> Users.ID = XmlUsers.ID
P>Поле Logo (тип image) не сохраняется. P>ПОЧЕМУ? И как сделать так чтобы сохранялось?
Документации по 2000-му под рукой нет, а так на вскидку не помню — разве можно использовать тип image в openxml? В 2000, кажется, нет.
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, pukapin, Вы писали:
P>> UPDATE Users P>> SET P>> Name = XmlUsers.Name, P>> [Family name] = XmlUsers.[Family name], P>> [Logo] = XmlUsers.Logo P>> FROM P>> OPENXML(@hDoc, '/NewDataSet/My_x0020_profile') P>> WITH ( P>> ID int, P>> Name nvarchar(50), P>> [Family name] nvarchar(50), P>> [Logo] image P>> ) XmlUsers P>> WHERE P>> Users.ID = XmlUsers.ID
P>>Поле Logo (тип image) не сохраняется. P>>ПОЧЕМУ? И как сделать так чтобы сохранялось?
___>Документации по 2000-му под рукой нет, а так на вскидку не помню — разве можно использовать тип image в openxml? В 2000, кажется, нет.
Здравствуйте, pukapin, Вы писали:
P>>>Поле Logo (тип image) не сохраняется. P>>>ПОЧЕМУ? И как сделать так чтобы сохранялось?
___>>Документации по 2000-му под рукой нет, а так на вскидку не помню — разве можно использовать тип image в openxml? В 2000, кажется, нет.
P>Похоже, что и ntext нельзя.
Ну это из одной оперы — BLOB-ы: text, ntext, image. А в 2005 такого ограничения нет.