Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Автор: zediks
Дата сообщения: 20.02.2009 09:14
Здравствуйте, помогите пожалуйста решить следующую задачу:

Есть exe-файл, который при запуске делает запись в БД.
Для этого используется объект ADODB из библиотеки Interop.ADODB.dll,
которая должна лежать в той же папке что и EXE-файл.

Как "присоединить" этот dll ? Как явно указать путь к нему в коде программы?
Если делать в Visual Studio, создать проект то проблем нету.

Но мне нужно откомпилировать файл с кодом через командную строку.

csc /reference:Interop.ADODB.dll 2.cs пишет:
"Не удалось найти имя типа или пространства имён 'ADODB' (пропущена директива using или ссылка на сборку)"

хотя код содержит строку: using ADODB

Конечная цель - сделать так чтобы exe - файл тянул все ресурсы из dll находящихся с ним в одной папке.

Автор: Lazy KoT
Дата сообщения: 20.02.2009 17:56
zediks

Цитата:

The compiler searches for assembly references that are not fully qualified in the following order:
1. Current working directory. This is the directory from which the compiler is invoked.
2. The common language runtime system directory.
3. Directories specified by /lib.
4. Directories specified by the LIB environment variable.

Use /reference to specify an assembly reference.
/lib is additive; specifying it more than once appends to any prior values.


Попробуй указать полный путь к dll или укажи каталог в которой она лежит через /lib
Автор: V0lt
Дата сообщения: 21.02.2009 07:49
Как у NumericUpDown убрать стрелочки (что бы выглядел как TextBox, но остальные фичи остались)?
Автор: Lazy KoT
Дата сообщения: 21.02.2009 11:34
V0lt

Код: numericUpDown1.Controls[0].Visible = false;
Автор: V0lt
Дата сообщения: 21.02.2009 12:51
Lazy KoT
спасибо.
Работает, но коряво. На месте стрелок остается неиспользуемое поле, в котором находится "скриншотик" экрана.
Автор: Lazy KoT
Дата сообщения: 21.02.2009 13:20
V0lt
Да, дырка остается, но "скриншотика" у меня нет, такого же цвета как и поле ввода. Есть "скриншотик". Видел люди колдовали с размером стрелок (System.Windows.Forms.UpDownBase.UpDownButtons)

Код: Controls[0].Size
Автор: mihas83
Дата сообщения: 21.02.2009 18:13
Доброго времени суток!

Пишу на пару с сокурсником образовательную игру, в рамках учебного курса по С#.
Тема игры: изучение географии Европы. Идея игры заключается в том, чтобы при нажатии ''на страну'', рандомально появлялись четыре варианта ответов стран и среди них всегда была один правильный ответ, каждый раз на новом месте.

Проблема заключается в том, чтобы сделать помимо трёх неправильных вариантов один правильный, и чтобы места их постоянно менялись. Собеседование с преподователем завело в ещё большую дыру, вместо того, чтобы облегчить работу, он придумал нам новые проблемы. Предложил сделать массив внутри массива, чтобы случайные страны выдавались посредством loopa. А[B[х]].

Насколько мы его поняли, он хочет чтобы каждой стране на карте принадлежала определенная клетка в первом массиве, с 4 наименованиями стран, разделенных запятой и после этого числом означающим правильный ответ. После чего, пройдясь сплитом по клетке массива разделить все страны и разбросать их рандомом с помощью второго массива.

Эта схема показалась замудренной и слишком сложной,
По-моему наш преподаватель не ощущает уровня знаний своих студентов. Кроме того, получается при нажатии на определенную страну, всегда будут те же самые варианты ответов.
Единственное что будет меняться - их места, а это не совсем рандом, который мы хотели.

Поэтому обращаемся к вам за помощью и советом, как бы всё это лучше организовать, желательно с примерами в коде, так как уровень у нас начинающий и хочется научиться писать код по грамотному, основываясь на толковых примерах.

Чтобы лучше понять о чём идёт речь можете взлянуть на симуляцию будущей игры созданной в формате ppt.
Автор: eLLoco
Дата сообщения: 22.02.2009 10:39
Предложения схема прежде всего не гибкая - 4 страны фиксированы для каждой клетки.

А если самый простой вариант попробовать - у вас есть список (массив) стран в виде структуры с полями "Название страны", "Местоположение на карте". При выборе клетки мы точно знаем, что там за страна - выбираем ее. Остальные три - просто рандомно из этого самого массива стран. Пойдет?
Автор: Lazy KoT
Дата сообщения: 22.02.2009 14:13

Цитата:
Остальные три - просто рандомно из этого самого массива стран

А потом перемешиваем и выводим для выбора. (:
Автор: mihas83
Дата сообщения: 22.02.2009 14:18
eLLoco,

Tо есть, ты предлагаешь массив структур

Код: struct EuropaCountry
{
int m_CountryID;
String^ m_CountryName;
}
Автор: Lazy KoT
Дата сообщения: 23.02.2009 16:01
mihas83

Код: EuropaCountry[] europeCountryArray = {...}
Автор: eLLoco
Дата сообщения: 23.02.2009 16:07
mihas83

Цитата:
Код:
EuropaCountry[] europeCountryArray = {...}
IMHO вот это предлагал eLLoco.
Из этого массива Random-ом выбираешь в другой массив необходимое количество стран, потом пермешиваешь этот новый массив и выдаешь для выбора.
Что-то типа вот этого (код не тестил):

Да, Lazy KoT тему пишет А отдельный массив имен точно не нужен.
Автор: mihas83
Дата сообщения: 23.02.2009 21:47
Lazy KoT 17:01 23-02-2009
Цитата:
Ну и перемешать потом fakeCountryArray.

А чем не годится для fakeCountryArray мой m_countryNameStringArray ?
Как лучше его перемешать ?
Автор: Lazy KoT
Дата сообщения: 24.02.2009 12:47
mihas83

Цитата:
Как лучше его перемешать ?

Линк давал в первом своем ответе.
Автор: mihas83
Дата сообщения: 24.02.2009 22:26
Ребят, мы пошли немножко другим путём и всё понеслось.
Но застопорились на двух моментах:
1) Тормозим и не можем понять, как ещё разочек рандом сделать уже по четырём вынесенным вариантам ответа (buttons[]).
2) При нажатие на неправильно выбранную страну, её территория (неправильной страны) загорается серым цветом (налепленный сверху PNG) и весит над страной, пока пользователь не выберет другой вариант. Пока не смогли догадаться, как бы привязать неправильные варианты к своим странам. Так как их индекс теряется после наших рандомов.

Окиньте пожалуйста взглядом код, скажите как бы это лучше реализовать.


Код:
namespace geogra
{
public partial class WebForm1 : System.Web.UI.Page
{
string[] country = new string[] {"Poland", "Spain", "Germany", "Turkey", "Russia", "Romania", "Ukraine","France" };
int[] numbers = new int[] {0,0,0,0,0,0,0,0};
string[] buttons = new string[4];
// string[] buttonsEnd = new string[4];
string correct;
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Text = "Click on any country on the map";
Image2.Visible= false;
Panel1.Visible = false;
Button5.Visible = false;
}

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
correct = "Ukraine";
Random randomCountry = new Random();
for (int i = 0; i < 3;)
{
int a = randomCountry.Next(0, 8);
if (numbers[a] == 0)
{
buttons[i] = Convert.ToString(country[a]);
numbers[a] = 1;
if (country[a] == correct)
{
a = randomCountry.Next(0, 8);
i--;
}
i++;
}
else
{
a = randomCountry.Next(0, 8);
}

TextBox1.Text = "Which country is it?";
Panel1.Visible = true;

buttons[3] = correct;
Button1.Text = buttons[0];
Button2.Text = buttons[1];
Button3.Text = buttons[2];
Button4.Text = buttons[3];
}
}
Автор: Lazy KoT
Дата сообщения: 25.02.2009 11:18
mihas83
Мой слабенький мозг отказыется обрабатывать столь изощренные методы программирования. ):

Цитата:
Так как их индекс теряется после наших рандомов.
Вот для этого eLLoco и предлагал массив структур, а не массив строк.

По поводу перемешивания вот фрагмент кода, на который я давал линк выше, что тут может быть непонятного:
Код: /// <summary>
/// Slow but reliable method for randomizing string array
/// </summary>
static class RandomStringArrayTool
{
/// <summary>
/// Stores the current random number
/// </summary>
static Random _random = new Random();

/// <summary>
/// Return randomized version of the string array
/// </summary>
public static string[] RandomizeStrings(string[] arr)
{
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();
// Add all strings from array
// Add new random int each time
foreach (string s in arr)
{
list.Add(new KeyValuePair<int, string>(_random.Next(), s));
}
// Sort the list by the random number
var sorted = from item in list
orderby item.Key
select item;
// Allocate new string array
string[] result = new string[arr.Length];
// Copy values to array
int index = 0;
foreach (KeyValuePair<int, string> pair in sorted)
{
result[index] = pair.Value;
index++;
}
// Return copied array
return result;
}
}
Автор: LuckyStrike
Дата сообщения: 25.02.2009 13:04
Елси не сложно еще две)))
1)Дано число a (1 < a &#8804; 1,5). Из чисел 1, 1+1\2, 1+1/3,… вывести те, которые не меньше a.

2)Найти произведение всех целых чисел от a до b (значения a и b вводятся самим)
Автор: Lihonosov
Дата сообщения: 25.02.2009 15:00
LuckyStrike
Я думаю дублирование вопросов на каждой странице, мало чем поможет
Автор: Lazy KoT
Дата сообщения: 25.02.2009 15:59
Ну и я продублируюсь:
LuckyStrike
Автор: numetalist
Дата сообщения: 25.02.2009 17:46
очень нужна ваша помощь. необходимо определить, имеються ли в сетевом потоке(экземпляре NetworkStream) данные для чтения. можно бы это сделать, проверяя свойство NеtworkStream.DataAvailable в цикле, но тогда программа изволит много кушать. подскажите, имееються ли какие - либо события, которые бы могли помочь.
Автор: Lazy KoT
Дата сообщения: 26.02.2009 10:35
numetalist
Посмотри NetworkStream.BeginRead.
Автор: numetalist
Дата сообщения: 26.02.2009 14:25
собственно идея хороша, но меня не устраивает обыная ассинхронка тем, что я передаю сериализованый при помощи System.Runtime.Serialization.Formatters.Binary.BinaryFormatter обьект. Методом Serializе(), который пишет непосредственно в поток. И считываю при помощи Deserialize. Возможно есть способы получить сериализованный обьект в виде массива байт? Тогда мне бы твой совет очень помог.
Автор: Lazy KoT
Дата сообщения: 26.02.2009 15:28
numetalist
Можно писать в MemoryStream BinaryWriter-ом и потом скормить BinaryFormatter. Deserialize этот поток.

И может WaitHandle поможет для организации ожидания.
Автор: Xttx
Дата сообщения: 26.02.2009 18:35
Помогите пожалуйсто освоить LINQ,
я примерно разобрался, там, в МСДН, показано на примере коллекции string, и сами запросы, да и лямбда выражения у меня уже, компилируються, но есть несколько жизненноважных непоняток на которых я застрял:

1) Вот, к примеру, примерметода Repeat из МСДН:
Dim str As IEnumerable(Of String) = Enumerable.Repeat("I like programming.", 15)
И что с ним дальше делать? Как реально получить эту строку из 15и "I like programming."? str.tostring выводит название класса и некоторые его свойства.

2) Допустим есть два класса в неймспейсе х:
x.abracadabra и x.abracadabraCollection
в abracadabraCollection через .item(n) можно получить доступ к abracadabra.
допустим вот это:
Dim a As new x.abracadabraCollection(param1, param2, param3)
заполнит мне "а" чем ни будь полезным.
А вот это:
Dim b As IEnumerable(Of x.abracadabraCollection) = a - выдаст ошибку. Вот как правильно написать? Конкретно это нужно применительно к System.Text.RegularExpressions.MatchCollection

3) Просто если есть что-то внятное прочитать про LINQ с примерами на VB, поделитесь пожалуйсто ссылками, а то есть книги, но там про эту технологию написано только что она БУДЕТ в следующей версии и какая она крутая. (книги даже в общем-то не старые, 2003-2006г). А мсдн.... я просто через неделю в больницу, хотелось бы распечатать что б там почитать, а в мсдн надо по ссылкам лазить, там особо не по распечатаешь...
Автор: Lazy KoT
Дата сообщения: 26.02.2009 22:01
Xttx

Цитата:
Как реально получить эту строку из 15и "I like programming."?
StringBuilder-ом. (;

По книгам тут спроси и посмотри на торренте.
Автор: Xttx
Дата сообщения: 27.02.2009 09:12
Lazy KoT
С примерами на с# мне, к сожалению, никак.... Я не пойму ничего просто.
Нашел на торренте не плохую "Introducing Microsoft LINQ". Жаль что опять только Introducing, но, более менее.
Спасибо!!!

PS. ни в StringBuilder ни в System.strings нет аналога strRepeat (из php) для конкатенации н-ного количества строк. Вот char - сколько угодно, но не строк. Но я выпендрился:
strDup("%", 15).tostring.replace("%", "I like programming.")
Автор: Lihonosov
Дата сообщения: 27.02.2009 09:42
Xttx
Джосеф Раттц - LINQ язык интегрированных запросов в C# 2008 для профессионалов
код
Может все таки пригодится.
Автор: Lazy KoT
Дата сообщения: 27.02.2009 12:03
Xttx

Код: Dim str As IEnumerable(Of String) = Enumerable.Repeat("I like programming.", 15)
String.Join("", str.ToArray())
Автор: Xttx
Дата сообщения: 27.02.2009 12:44
Lihonosov
Да нет, спасибо, я в синтаксисе С# совершенно ничего не понимаю. К сожалению толку особого нету.... Но всё равно спасибо!

Lazy KoT
Вот! Спасибо!!! Теперь понятнее намного!

Помогите ещё с одним вопросом,
Как объеденить всю коллекцию в одну строку с помощью From (или ещё как)? Результат должен быть как если бы пройтись по всем элементам делая в теле цикла:
w += collection.item(n).value?
Реально это без For each?
Join("", from .value.tostring.ToArray()) - вот как-то так... (понимаю что бред написал. просто что б выразить идею).
Автор: Lazy KoT
Дата сообщения: 27.02.2009 13:16
Xttx
Данные какого типа в коллекции?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102

Предыдущая тема: Как удалить/добавить/отключить/включить устройство?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.