Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Добрый день!
Задача такая: получить значение одного поля таблицы и записать его в аналогичное поле той же таблицы.
Вот код
{
	class Program
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("Pisk v base dannih");
			SqlCeConnection conn = new SqlCeConnection();
			//SqlCeConnection conn = new SqlCeConnection();
			conn.ConnectionString = "Data Source = 'c:\\Documents and Settings\\ADMIN\\Мои документы\\ФСРАР\\Декларант-Алко\\7736036538_base.sdf';" +
    		"Password = '7338a7e6-fd3b-49d1-8d90-ddbbc1b39fa1'; File Mode = 'shared read'; ";
			int id_string;
			Decimal p108 = new Decimal();
			string qweri_P110="select P110, id  from decf11 where hid=60 and TTYPE=1";
			
			conn.Open();
			SqlCeCommand cmd = new SqlCeCommand(qweri_P110, conn);
			SqlCeDataReader rdr = cmd.ExecuteReader();
			
			
				
				while(rdr.Read())
				{
					id_string = rdr.GetInt32(1);
					p108= rdr.GetDecimal(0);
					string update_P108="update decf11 set p108='"+p108+"' where id='"+id_string+"'";
					SqlCeCommand cmd_update = new SqlCeCommand(update_P108, conn);
					cmd_update.ExecuteNonQuery();
					Console.WriteLine(id_string+" sodergit "+p108);
					
				}
				
			
			rdr.Close();
			conn.Close();			
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}

Возникает следующая ошибка:

System.Data.SqlServerCe.SqlCeException: Сбой преобразования данных. [ OLE DB status value (if known) = 0 ]
at System.Data.SqlServerCe.SqlCeCommand.ProcessResults
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText
at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand
at System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery
at Make_teble_one.Program.Main in c:\Documents and Settings\ADMIN\Мои документы\SharpDevelop Projects\Make_teble_one\Make_teble_one\Program.cs:line 40

Не пойму что делаю не так. Помогите пожалуйста

P.S.
Схема таблицы:
CREATE TABLE [DecF11]
(
[id] INT NOT NULL IDENTITY (101,1),
[Hid] INT,
[vidCode] NVARCHAR(5),
[ProdId] INT,
[idPost] INT,
[idLic] INT,
[P213] NVARCHAR(15),
[P214] NVARCHAR(50),
[P215] NVARCHAR(50),
[P216] DECIMAL(15,5),
[P106] DECIMAL(15,5),
[P107] DECIMAL(15,5),
[P108] DECIMAL(15,5),
[P109] DECIMAL(15,5),
[P110] DECIMAL(15,5),
[P111] DECIMAL(15,5),
[P112] DECIMAL(15,5),
[P113] DECIMAL(15,5),
[P114] DECIMAL(15,5),
[P115] DECIMAL(15,5),
[P116] DECIMAL(15,5),
[P117] DECIMAL(15,5),
[P118] DECIMAL(15,5),
[P119] DECIMAL(15,5),
[P120] DECIMAL(15,5),
[TTYPE] INT,
[idOrg] NVARCHAR(100)
);

ALTER TABLE [DecF11] ADD CONSTRAINT [PK__DecF11__00000000000004A1] PRIMARY KEY ([id]);
9 окт 13, 11:43    [14943712]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6202
fomim
Не пойму что делаю не так.

То, за что обычно разработчиков приложений, работающих с БД, бьют тупым тяжелым предметом - за передачу параметров конкатенацией.
9 окт 13, 11:51    [14943773]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Сон Веры Павловны
fomim
Не пойму что делаю не так.

То, за что обычно разработчиков приложений, работающих с БД, бьют тупым тяжелым предметом - за передачу параметров конкатенацией.

а по подробнее?
9 окт 13, 11:52    [14943784]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
Glory
Member

Откуда:
Сообщений: 104751
p108='"+p108+"' where id='"+id_string+"'"
[id] INT
[P108] DECIMAL(15,5)
У вас так принято, числовые данные передавать как строки ?
9 окт 13, 11:53    [14943791]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Glory
p108='"+p108+"' where id='"+id_string+"'"
[id] INT
[P108] DECIMAL(15,5)
У вас так принято, числовые данные передавать как строки ?


int id_string;
это не строка
9 окт 13, 11:54    [14943808]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
Glory
Member

Откуда:
Сообщений: 104751
fomim
Glory
p108='"+p108+"' where id='"+id_string+"'"
[id] INT
[P108] DECIMAL(15,5)
У вас так принято, числовые данные передавать как строки ?


int id_string;
это не строка

Вот именно, что поля в таблице числовые, а значения в тексте запроса почему то в кавычках
9 окт 13, 11:55    [14943818]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
qwerty112
Guest
fomim
			conn.ConnectionString = "Data Source = 'c:\\Documents and Settings\\ADMIN\\Мои документы\\ФСРАР\\Декларант-Алко\\7736036538_base.sdf';" +
    		"Password = '7338a7e6-fd3b-49d1-8d90-ddbbc1b39fa1'; File Mode = 'shared read'; ";

а ничо, что вы в коннекте на "только чтение", делаете UPDATE ?
9 окт 13, 11:55    [14943819]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
qwerty112
Guest
qwerty112
fomim
			conn.ConnectionString = "Data Source = 'c:\\Documents and Settings\\ADMIN\\Мои документы\\ФСРАР\\Декларант-Алко\\7736036538_base.sdf';" +
    		"Password = '7338a7e6-fd3b-49d1-8d90-ddbbc1b39fa1'; File Mode = 'shared read'; ";

а ничо, что вы в коннекте на "только чтение", делаете UPDATE ?

отменяется )
http://msdn.microsoft.com/en-us/library/ms171817.aspx
Value Definition
Shared Read Permits other processes to read, but not modify, the database while you have it open.
9 окт 13, 12:01    [14943859]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Glory
fomim
пропущено...


int id_string;
это не строка

Вот именно, что поля в таблице числовые, а значения в тексте запроса почему то в кавычках

изменил на:
string update_P108="update decf11 set p108='"+p108+"' where id="+id_string;

ничего не поменялось
9 окт 13, 12:02    [14943866]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
Glory
Member

Откуда:
Сообщений: 104751
fomim
изменил на:
string update_P108="update decf11 set p108='"+p108+"' where id="+id_string;


ничего не поменялось

Поля - это множественное от слова поле
9 окт 13, 12:03    [14943873]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Glory
fomim
изменил на:
string update_P108="update decf11 set p108='"+p108+"' where id="+id_string;


ничего не поменялось

Поля - это множественное от слова поле

убираю кавычки :
string update_P108="update decf11 set p108="+p108+" where id="+id_string;

Ошибка:
System.Data.SqlServerCe.SqlCeException: Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = 00000 ]
9 окт 13, 12:06    [14943889]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
Гость333
Member

Откуда:
Сообщений: 3683
fomim,

Вангую: у вас в SQL передается десятичное числр с разделителем-запятой.
9 окт 13, 12:14    [14943936]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Гость333
fomim,

Вангую: у вас в SQL передается десятичное числр с разделителем-запятой.

Что то я так и не пойму нужны кавычки или нет?
Если нужны то где и какие?
9 окт 13, 12:19    [14943971]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
fomim
string update_P108="update decf11 set p108="+p108+" where id="+id_string;

Ошибка:
System.Data.SqlServerCe.SqlCeException: Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = 00000 ]
А не слабо ли Вам пройтись пошагово дебагером и посмотреть значения переменных (в том числе и результирующей строки запроса) в студии?
Век воли не видать: у Вас символ десятичного разделителя - "запятая", которая аккурат приходится на 26-ю позицию в строке запроса

Ну, и почитать про использование параметров в запросах Вам не помешало бы...
9 окт 13, 12:23    [14943999]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
sphinx_mv
fomim
string update_P108="update decf11 set p108="+p108+" where id="+id_string;

Ошибка:
System.Data.SqlServerCe.SqlCeException: Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = 00000 ]
А не слабо ли Вам пройтись пошагово дебагером и посмотреть значения переменных (в том числе и результирующей строки запроса) в студии?
Век воли не видать: у Вас символ десятичного разделителя - "запятая", которая аккурат приходится на 26-ю позицию в строке запроса

Ну, и почитать про использование параметров в запросах Вам не помешало бы...


Вопрос собственно не в:
System.Data.SqlServerCe.SqlCeException: Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = 00000 ]
а в:
System.Data.SqlServerCe.SqlCeException: Сбой преобразования данных. [ OLE DB status value (if known) = 0 ]
9 окт 13, 12:32    [14944066]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
Гость333
Member

Откуда:
Сообщений: 3683
fomim
Вопрос собственно не в:
System.Data.SqlServerCe.SqlCeException: Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = 00000 ]
а в:
System.Data.SqlServerCe.SqlCeException: Сбой преобразования данных. [ OLE DB status value (if known) = 0 ]

Вы не поверите, но обе эти ошибки вызваны некорректным десятичным разделителем.
Как это победить — вам намекнул Сон Веры Павловны вот здесь 14943773.
Если намёка недостаточно, то расшифрую: передавайте ваши значения в запрос в виде параметров, а не в виде текста.
9 окт 13, 12:41    [14944126]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
А начать нужно с главного: зачем вообще тянуть данные на клиента, а потом построчно их менять?
9 окт 13, 12:44    [14944146]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
Гость333
fomim
Вопрос собственно не в:
System.Data.SqlServerCe.SqlCeException: Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = 00000 ]
а в:
System.Data.SqlServerCe.SqlCeException: Сбой преобразования данных. [ OLE DB status value (if known) = 0 ]

Вы не поверите, но обе эти ошибки вызваны некорректным десятичным разделителем.
Как это победить — вам намекнул Сон Веры Павловны вот здесь 14943773.
Если намёка недостаточно, то расшифрую: передавайте ваши значения в запрос в виде параметров, а не в виде текста.

Простите за неграмотность но как это сделать?
9 окт 13, 12:44    [14944155]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
invm
А начать нужно с главного: зачем вообще тянуть данные на клиента, а потом построчно их менять?

Вы имеете ввиду подзапрос?
9 окт 13, 12:51    [14944213]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
invm
Member

Откуда: Москва
Сообщений: 9838
fomim
Вы имеете ввиду подзапрос?
Почему нельзя сразу выполнить
update decf11 set p108 = p110 where hid=60 and TTYPE=1
?
9 окт 13, 13:26    [14944456]     Ответить | Цитировать Сообщить модератору
 Re: Изменение поля в таблице из C#  [new]
fomim
Member

Откуда:
Сообщений: 12
invm
fomim
Вы имеете ввиду подзапрос?
Почему нельзя сразу выполнить
update decf11 set p108 = p110 where hid=60 and TTYPE=1
?

Неопытность и незнание.
Спасибо большое!!!
9 окт 13, 14:46    [14945150]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить