powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Необходимо объявить скалярную переменную "@clientUserName".
14 сообщений из 14, страница 1 из 1
Необходимо объявить скалярную переменную "@clientUserName".
    #37712734
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
Как избавиться от этой ошибки
есть GridviewLog. И столбец для удаления.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        protected void GridViewLog_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            SqlDataSourceLog.DeleteCommand = "DELETE FROM WebProxyLog WHERE (ClientUserName = @clientUserName) AND (DestHost = @desthost)";
            SqlDataSourceLog.DeleteParameters.Add("clientUserName", DbType.String, e.Values[0] as string);            
            SqlDataSourceLog.DeleteParameters.Add("desthost",DbType.String, e.Values[1] as string);
            SqlDataSourceLog.Delete();

        }



При нажатии на delete вылазит эта ошибка
[SqlException (0x80131904): Необходимо объявить скалярную переменную "@clientUserName".]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +2030802
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +5009584
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() +234
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2275
System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async) +228

хотя строка при этом удаляется. Поля ClientUserName и DestHost не ключевые. (из базы удаляется сразу несколько строк, тоесть работает как надо)
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37713006
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
а если глянуть профилером(тюнингом например) что реально на сервер приходит?
(скорее всего строка начинается словом exec)
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37713046
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
в общем, чото я сразу не подумал, что можно другим путем пойти.Решил сделать просто
Код: c#
1.
2.
            SqlDataSourceLog.DeleteCommand = "DELETE FROM WebProxyLog WHERE (ClientUserName ='"+e.Values[0] as string+"') AND (DestHost = '"+e.Values[1] as string+"')";
            SqlDataSourceLog.Delete();



И никаких параметров.
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37713070
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
zxvдругим путем пойти1) sql и параметры объявить в разметке SqlDataSource
2) ClientUserName и DestHost добавить в DataKeyNames грида
3) код не писать
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37713245
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zxvв общем, чото я сразу не подумал, что можно другим путем пойти.Решил сделать просто
Код: c#
1.
2.
            SqlDataSourceLog.DeleteCommand = "DELETE FROM WebProxyLog WHERE (ClientUserName ='"+e.Values[0] as string+"') AND (DestHost = '"+e.Values[1] as string+"')";
            SqlDataSourceLog.Delete();



И никаких параметров.
Жесть, не делай так :)
Лучше параметры определи в разметке, а в коде пиши что-то вроде:
Код: c#
1.
SqlDataSourceLog.DeleteParameters["ClientUserName"].DefaultValue = value;



и почитайте Using Parameters with the SqlDataSource Control
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37713617
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
SanSYSzxvв общем, чото я сразу не подумал, что можно другим путем пойти.Решил сделать просто
Код: c#
1.
2.
            SqlDataSourceLog.DeleteCommand = "DELETE FROM WebProxyLog WHERE (ClientUserName ='"+e.Values[0] as string+"') AND (DestHost = '"+e.Values[1] as string+"')";
            SqlDataSourceLog.Delete();



И никаких параметров.
Жесть, не делай так :)
Лучше параметры определи в разметке, а в коде пиши что-то вроде:
Код: c#
1.
SqlDataSourceLog.DeleteParameters["ClientUserName"].DefaultValue = value;



и почитайте Using Parameters with the SqlDataSource Control

я делал по всякому, и в разметке параметры писал, и DefaultValue пробовал. Все равно вот эта ошибка
Необходимо объявить скалярную переменную "@clientUserName".

это тоже читал неск раз.
Using Parameters with the SqlDataSource Control [/quot]

кстати в другой задаче делал все в разметке, без всякого кода, и все работало (но там в гридвью простой запрос был)
а в данном случае запрос чуть посложнее
SELECT ClientUserName, DestHost, cast(sum(bytessent) as money)/1024/1024 AS mb,clientagent FROM WebProxyLog WHERE (DstNetwork = 'external') GROUP BY ClientUserName, DestHost, clientagent ORDER BY ClientUserName, mb DESC
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37714598
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zxv, да заюзай просто SqlCommand )
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37714826
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
SanSYSzxv, да заюзай просто SqlCommand )
уже хотел так сделать, но потом решил просто без параметров сделать, т.к. проще.
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37715167
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
zxvв данном случае запрос чуть посложнееClientUserName и DestHost присутствуют в селекте, значит "сложность" селекта ни при чем
показывай разметку
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37715331
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
Разметка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
</asp:SqlDataSource>
        <asp:SqlDataSource ID="SqlDataSourceLog" runat="server" 
            ConnectionString="<%$ ConnectionStrings:isalogConnectionString %>"             
            SelectCommand="SELECT   ClientUserName, DestHost, (cast(sum(bytessent) as money)/1024/1024)  AS mb FROM WebProxyLog WHERE (DstNetwork = 'external') and ClientUserName='testuser' GROUP BY ClientUserName, DestHost ORDER BY ClientUserName, mb DESC" 

            DeleteCommand="DELETE FROM WebProxyLog WHERE (ClientUserName = @ClientUserName) AND (DestHost = @DestHost)">
            <DeleteParameters>
                <asp:Parameter Name="ClientUserName" />
                <asp:Parameter Name="DestHost" />
            </DeleteParameters>
</asp:SqlDataSource>



Код
Код: c#
1.
2.
3.
4.
5.
 protected void GridViewLog_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
           SqlDataSourceLog.DeleteParameters.Add("ClientUserName", DbType.String, e.Values[0] as string);            
           SqlDataSourceLog.DeleteParameters.Add("DestHost",DbType.String, e.Values[1] as string);
        }



и ошибка
Необходимо объявить скалярную переменную "@ClientUserName".
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37715366
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
разметку грида тоже давай
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37715373
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    <asp:GridView ID="GridViewLog" runat="server" AllowPaging="True" 
        AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSourceLog" 
        Font-Names="Microsoft Sans Serif" Font-Size="8pt" PageSize="100" 
        style="font-family: 'Microsoft Sans Serif'" 
        onrowdeleting="GridViewLog_RowDeleting">
        <Columns>
            <asp:TemplateField ShowHeader="False">
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False" 
                        CommandName="Delete" Text="Delete"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="ClientUserName" HeaderText="Login" 
                SortExpression="ClientUserName">
            <ItemStyle BackColor="#CCFFCC" ForeColor="Black" />
            </asp:BoundField>
            <asp:BoundField DataField="DestHost" HeaderText="Сайт" 
                SortExpression="DestHost" />
            <asp:BoundField DataField="mb" HeaderText="Получено МБ" ReadOnly="True" 
                SortExpression="mb" />
            <asp:BoundField DataField="clientagent" SortExpression="clientagent" />
        </Columns>
    </asp:GridView>
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37715382
.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
.
Гость
.1) sql и параметры объявить в разметке SqlDataSource
2) ClientUserName и DestHost добавить в DataKeyNames грида
3) код не писать
...
Рейтинг: 0 / 0
Необходимо объявить скалярную переменную "@clientUserName".
    #37715486
zxv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
zxv
Гость
Спасибо, получилось.
про DataKeyNames сначала не хотелось заморачиваться, а оказалось все просто.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Необходимо объявить скалярную переменную "@clientUserName".
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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